我有一个名为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设为静态,问题仍然存在。
答案 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()而不是数组,如果您想坚持使用每个数组更快。