AS3无法使用splice()从数组中删除元素

时间:2014-04-01 19:14:27

标签: arrays actionscript-3

我有一个名为BouncingEnemy的类,它扩展了精灵 在其构造函数中,我调用level.enemies.push(this); //(level.enemies is an array)
当我测试碰撞时,我用

遍历每个敌人
for each (var en:BouncingEnemy in level.enemies) {
    if (!(en === this)) {
        //code to test collisions
    }
}

当敌人被杀时,我打电话给

level.enemies.splice(level.enemies.indexOf(this), 1);
level.removeChild (this);

我的问题是,当我执行最后一段代码时,敌人会从屏幕上消失,但其他敌人仍然会碰撞它,好像它仍在那里一样。我的代码出了什么问题?


编辑:请注意,上面的所有代码都在BouncingEnemy类中。当我从任何其他类循环level.enemies时,一切都按预期进行。


当我评论level.removeChild (this);行时,我也发现"已删除"敌人不会相互碰撞。它们只碰撞墙壁(单独测试)和#34;真实的"敌人。


即使我将Level.enemies设为静态,问题仍然存在。

1 个答案:

答案 0 :(得分:0)

对于速度优化,您应该使用:

var t:int = int(level.enemies.length);
for(var i:uint = 0; i < t; i++){
    if(level.enemies[i] !== this){
        //test collision
        //if collision and if enemy dies ? not sure about how your code is organized
        level.removeChild(level.enemies[i]);
        level.enemies.splice(i, 1);            
        break;
    }
} 

或者您甚至可以使用Dictionary()而不是数组,如果您想坚持使用每个数组更快。