for each(var e:Enemy in enemies)
{
if(e.getHealth() == 0)
{
enemies.splice(e,1);
}
}
只要enemies[0]
首先被杀死,此代码就可以正常工作。如果enemies[1]
先被杀死,则将两者拼接起来。我怎样才能改变这一点,以便只有生命值为 0 的特定敌人被拼接?
for each(var e:Enemy in enemies)
{
if(e.getHealth() == 0)
{
enemies.splice(e,1);
}
}
只要enemies[0]
首先被杀死,此代码就可以正常工作。如果enemies[1]
先被杀死,则将两者拼接起来。我怎样才能改变这一点,以便只有生命值为 0 的特定敌人被拼接?
最好的方法是在向后遍历时进行拼接。Brent 有一个好主意,但是如果需要将两个相邻的敌人从数组中拼接出来,它可能会失败,因为那些向前的敌人的索引向左移动,因此,当计数器增加时,一个紧邻错过了拼接。
for (var i:int=enemies.length-1; i >=0 ; i--)
{
if(enemies[i].getHealth() == 0)
{
enemies.splice(i,1);
}
}
for each
也有可能,尽管行为可能会有所不同。
for each(var e:Enemy in enemies)
{
if(e.getHealth() == 0)
{
enemies.splice(enemies.indexOf(e),1); // splice() wants an index
}
}
在您正在修改的数组上循环总是很危险的。我认为最简单的方法是:
var aliveEnemies:Array = [];
for each(var e:Enemy in enemies)
{
if(e.getHealth() > 0)
{
aliveEnemies.push(e);
}
}
enemies = aliveEnemies;
这将查看并删除任何死去的敌人。请注意使用 i 变量的 for 循环,这是我假设您开始的地方。我不确定如何从 AS3 中的 foreach 循环中获取索引。
for (var i:int=0; i < enemies.length; i++)
{
if(enemies[i] && enemies[i].getHealth() == 0)
{
enemies.splice(i,1);
i--;//index is re-stacked, next element is current element.
}
}