ActionScript 3中的数组拼接问题

时间:2013-04-25 15:38:21

标签: actionscript-3

for each(var e:Enemy in enemies)
{
    if(e.getHealth() == 0)
    {
        enemies.splice(e,1);
    }
}

只要首先杀死enemies[0],此代码就可以正常工作。如果首先杀死enemies[1],它会拼接两者。我怎样才能改变这一点,只有健康命中0的特定敌人正在被拼接?

3 个答案:

答案 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.
    }
}