繁体   English   中英

Andengine Sprite动态Zindex

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM