[英]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.