我目前已经实现了这个系统,当一个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);
}
}
}
答案 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);
}