有效杀死敌人的方法

时间:2014-07-10 05:09:29

标签: java android

我目前已经实现了这个系统,当一个minion死亡时,我将minion的x位置设置为-100,从而将他移出屏幕。但随着我添加更多的奴才,我意识到这会减慢我的安卓游戏。有没有更好的方法从游戏中完全删除这个小兵?

以下代码的说明。每个小兵都以特定的时间间隔创建,然后添加到名为minionarray的arraylist中。从那里检查minionarray中的每个minion以查看该特定minion的布尔isDead是否为真。如果确实是miniondeath动画开始,当它结束时,小兵被设置为-100,从而将他从屏幕上移除。需要一种更好的方法从游戏中完全删除这个小兵。

P.S - 解决了。 Gil Moshayef的方法效果最好!谢谢大家!

for (Minions m : minionarray) {
    m.update();
    if (m.isDead() == true) {

        m.setMinionSpriteCurrent(minDeath.getImage());
        m.setSpeedX(0);
        if (minDeath.getImage() == minDeath4) {
            m.setCenterX(-100);

        }
    }
}

3 个答案:

答案 0 :(得分:2)

我建议不要移动它们,将它们设置为null,以便垃圾收集器摆脱它们。这样他们就不占用任何内存,也没有使用任何处理能力。 (当前循环的工作方式,除非它们被移动时被设置为false,它们将继续被移回-100)

答案 1 :(得分:1)

您应该从阵列中删除它。

从一个以“for each”方式迭代的数组中删除项目有点问题,但是如果你将它改为普通for循环,你可以这样做:

Minion m;
for (int i = 0; i < minionArray.size(); i++) { // I'm assuming minionArray is a List type
    m = minionArray.get(i);
    m.update();
    if (m.isDead() == true) {

        minionArray.remove(i);
        i--; // set the pointer back by 1 so you don't skip updating the next minion in the list.
    }
}

答案 2 :(得分:0)

您只需从minionarray列表中删除minion即可。我假设您正在迭代列表以绘制和更新精灵;当您从列表中删除它们时,您不必将这些操作应用于minions。

if (m.isDead()) 
{
      minonarray.remove(m);
}