簡體   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