for each(var e:Enemy in enemies)
{
if(e.getHealth() == 0)
{
enemies.splice(e,1);
}
}
只要首先杀死enemies[0]
,此代码就可以正常工作。如果首先杀死enemies[1]
,它会拼接两者。我怎样才能改变这一点,只有健康命中0的特定敌人正在被拼接?
答案 0 :(得分:4)
最好的方法是在向后移动时进行拼接。布伦特有一个好主意,但是如果需要将两个相邻的敌人拼接出阵列,它就会失败,因为那些前进的东西会让他们的索引向左移动,因此,当计数器递增时,一个元素紧挨着那个错过了拼接。
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
}
}
答案 1 :(得分:1)
在您正在修改的阵列上循环总是有害的。我认为最简单的方法是:
var aliveEnemies:Array = [];
for each(var e:Enemy in enemies)
{
if(e.getHealth() > 0)
{
aliveEnemies.push(e);
}
}
enemies = aliveEnemies;
答案 2 :(得分:0)
这将查看并删除任何死敌。注意使用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.
}
}