[英]Andengine sprite dynamic Zindex
在我的游戲中,我有一些重疊的運動精靈,我想動態設置每個精靈的Zindex,以獲得類似透視圖的效果。
我可以在創建場景時設置每個精靈的Zindex,但是它們會沿隨機方向移動,因此我必須設置每個精靈的sortChildren()
並對每個幀都進行sortChildren()
,但這會sortChildren()
性能損失。
是否可以動態設置精靈圖層?
我是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();
}
}
}
}
我不是100%不確定您的游戲應該如何運作,因此很難建議您當前使用的策略的替代方案。 但是,您可以優化現有代碼以提高性能,這可能會或可能不會解決您的問題。 現在,您要遍歷敵方精靈n ^ 2次,並在每次迭代時對圖層進行排序。 確實,在設置所有z索引之后,只需調用一次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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.