Arrays AS3 can';t使用splice()从数组中删除元素
我有一个名为Bouncingemy的类,它扩展了sprite。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(
在它的构造函数中,我调用
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,看看这是否有效。是否有听众绑定到你的任何敌人?我通常在删除对象之前删除侦听器,以确保没有留下引用。是的,确实如此!有一个输入帧事件侦听器。即使在杀死敌人的密码被调用后,它仍不断被发射,从而触发了碰撞。。。所以问题不在于真正的敌人与死去的敌人发生碰撞,而在于死去的敌人即使在被杀死后仍在寻找碰撞(只与真正的敌人发生碰撞,这就是为什么死去的敌人不会相互碰撞)。