2014-03-27 86 views
0

在我的遊戲中我有一些移動的小精靈重疊,我想動態設置每個小精靈的Zindex,以獲得像透視視圖。Andengine sprite動態Zindex

我可以在創建場景時設置每個精靈的Zindex,但是他們隨機移動,所以我必須設置每個精靈的Zindex併爲每個幀做sortChildren(),但這樣做性能很高。

是否有替代動態設置sprite圖層?

我是andengine和gamedev的新手,希望你能理解我的問題。這裏有些測試代碼(代碼執行更新線程每一幀):

public void sortEnemy(){ 
    int indexZ; 
    Iterator<Enemy> enemyIterator = EnemyList.iterator(); 
    while (enemyIterator.hasNext()) { 
     Enemy e = (Enemy) enemyIterator.next(); 
     for(int j = EnemyList.size() - 1; j >= 0; j--){ 
      Enemy e2 = (Enemy) EnemyList.get(j); 
      if(e.getY()>e2.getY()){ 
       indexZ = e2.getZIndex(); 
       Debug.e("e2 z= "+indexZ); 
       indexZ++; 
       Debug.e("e z= "+indexZ); 
       e.setZIndex(indexZ); 
       enemyLayer.sortChildren(); 

      } 
     } 

    } 
} 

回答

1

我不是100%肯定你的遊戲是如何工作的,所以很難建議你目前正在使用的替代戰略。但是,您可以優化現有代碼以提高性能,這可能會或可能不會解決您的問題。現在你正在迭代你的敵方精靈n^2次,並且每次迭代排序圖層。真的,你只需要在所有的z-index都被設置好後再撥打sortChildren()

這裏是你如何重構代碼,以加快速度一點的例子:

Comparator<Enemy> comparator = new Comparator<Enemy>() { 

    @Override 
    public int compare(Enemy e1, Enemy e2) { 
     if (e1.getY() > e2.getY()) 
      return 1; 
     else if (e1.getY() < e2.getY()) 
      return -1; 
     return 0; 
    } 

}; 
Collections.sort(EnemyList, comparator); 
for (int i=0; i<EnemyList.size(); i++) { 
    EnemyList.get(i).setZIndex(i); 
} 
enemyLayer.sortChildren(); 
+0

謝謝,現在的作品如我所料。 'sortChildren()'仍然調用每一幀,但在我的情況下很難避免這種情況,所以現在它是通過Zindex排序精靈的最佳方式。 – user3470643