我有一个安卓游戏,涉及一艘船射击敌人。我试图让它成为如果敌人在ammos的一定距离内,那么敌人将自己从屏幕上移开。我试图这样做,代码编译,但我不确定为什么敌人一旦被击中就不会从屏幕上移除。任何人都可以看到下面的代码有什么问题吗?三江源
for (TopEnemy i : newTopEnemy)
{
for (int q = 0; q < ammo.length; q++)
{
float xsubs = i.enemyX - ammo[q].positionX;
float ysubs = i.enemyY - ammo[q].positionY;
float squared = (xsubs * xsubs) + (ysubs * ysubs);
float distance = (float)Math.sqrt(squared);
if (distance < 10.0)
{
newTopEnemy.remove(q);
}
}
}
答案 0 :(得分:5)
不应该是newTopEnemy.remove(i);
吗? q
看起来像ammo
上的索引。
答案 1 :(得分:3)
您需要使用Iteratore.remove
。
for (Iterator<TopEnemy> itr = intList2.iterator(); iterator.hasNext();) {
TopEnemy enemy = itr.next();
//code here
if (distance < 10.0) {
itr.remove();
}
}
答案 2 :(得分:1)
使用foreach循环时无法从列表中删除。您必须使用迭代器遍历列表,然后使用remove方法删除。
答案 3 :(得分:0)
我想补充一下Vlad回答,在循环遍历这样的列表时删除项目并不总是一个好主意。我会这样做:
for (int i = newTopEnemy.size()-1;i>=0;i--) {
TopEnemy enemy = newTopEnemy.get(i);
for (int q = 0; q < ammo.length; q++) {
float xsubs = enemy.enemyX - ammo[q].positionX;
float ysubs = enemy.enemyY - ammo[q].positionY;
float squared = (xsubs * xsubs) + (ysubs * ysubs);
float distance = (float)Math.sqrt(squared);
if (distance < 10.0) {
newTopEnemy.remove(i);
break;
}
}
}