Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays AS3 can';t使用splice()从数组中删除元素_Arrays_Actionscript 3 - Fatal编程技术网

Arrays AS3 can';t使用splice()从数组中删除元素

Arrays AS3 can';t使用splice()从数组中删除元素,arrays,actionscript-3,Arrays,Actionscript 3,我有一个名为Bouncingemy的类,它扩展了sprite。 在它的构造函数中,我调用level.friends.push(this)//(level.敌军是一个数组) 当我测试碰撞时,我会用 for each (var en:BouncingEnemy in level.enemies) { if (!(en === this)) { //code to test collisions } } 当敌人被杀时,我呼叫 level.enemies.splice(

我有一个名为Bouncingemy的类,它扩展了sprite。
在它的构造函数中,我调用
level.friends.push(this)//(level.敌军是一个数组)

当我测试碰撞时,我会用

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);
我的问题是,当我执行最后一段代码时,敌人确实会从屏幕上消失,但其他敌人仍然会与它发生碰撞,就好像它仍然存在一样。我的代码怎么了


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


当我注释掉
level.removeChild(这个)行,我还注意到“删除”的敌人不会相互碰撞。它们只会碰撞墙壁(单独测试)和“真正”的敌人



问题仍然存在,即使在我的水平。敌人静态

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

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;
    }
} 
var t:int=int(级别.长度);
对于(变量i:uint=0;i

或者,您甚至可以使用Dictionary()而不是array,如果您想坚持使用for-each,那么array会更快

1)敌人在碰撞时不会被杀死,他们在碰撞时会反弹,当他们的生命达到0时他们会被杀死2)速度优化不是我要求的,但由于我非常绝望,我会尝试使用for而不是for,看看这是否有效。是否有听众绑定到你的任何敌人?我通常在删除对象之前删除侦听器,以确保没有留下引用。是的,确实如此!有一个输入帧事件侦听器。即使在杀死敌人的密码被调用后,它仍不断被发射,从而触发了碰撞。。。所以问题不在于真正的敌人与死去的敌人发生碰撞,而在于死去的敌人即使在被杀死后仍在寻找碰撞(只与真正的敌人发生碰撞,这就是为什么死去的敌人不会相互碰撞)。