我正在制作一个简单的游戏,并且有一个充满敌人的向量,以便从我的“激光”对象(它是一个空间 shmup)对它们进行命中检查。每个激光都循环穿过 Vector 并检查它是否遮挡了命中圈。问题在于当一个激光摧毁一个敌人时,其余的激光也尝试检查相同的向量,只是因为敌人已经被拼接出来并且它改变了向量的大小而超出了界限。
for each (var enemy:Enemy in enemies){
var distanceX = this.x - enemy.x;
var distanceY = this.y - enemy.y;
var distance = Math.sqrt( (distanceX*distanceX) + (distanceY*distanceY) );
if (distance <= enemy.hitRadius) {
enemy.removeEnemy();
enemies.splice(enemies.indexOf(enemy),enemies.indexOf(enemy));
}
}
我将如何收集要删除的 Vector 中各个元素的索引,然后仅在每个 Laser 对象完成检查后才删除它们?
编辑:这是我的 Enemy 类中的 removeEnemy() 函数,以防万一:
public function removeEnemy(){
removeEventListener(Event.ENTER_FRAME, move);
parent.removeChild(this);
trace("removed Enemy", enemies.indexOf(this));
}
编辑编辑:在我的 removeEnemy() 函数中,我也收到一个指向“父”的空引用指针错误......但只是有时。我有一种感觉,如果我解决了这两个问题中的一个,另一个也将得到解决,但我不确定。