私は簡単なゲームを作成していて、「レーザー」オブジェクト(スペースシュムップ)から敵をヒットチェックするために、敵でいっぱいのベクターを持っています。すべてのレーザーはベクターをループし、ヒットサークルを遮っているかどうかをチェックします。問題は、1つのレーザーが敵を破壊したときに、残りのレーザーも同じベクトルをチェックしようとしますが、敵はすでにスプライスされており、ベクトルのサイズが変更されているため、範囲外になります。
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));
}
}
削除するベクター内の個々の要素のインデックスを収集し、すべてのレーザーオブジェクトのチェックが終了したときにのみそれらを削除するにはどうすればよいですか?
編集:念のため、EnemyクラスからのremoveEnemy()関数を次に示します。
public function removeEnemy(){
removeEventListener(Event.ENTER_FRAME, move);
parent.removeChild(this);
trace("removed Enemy", enemies.indexOf(this));
}
編集編集:removeEnemy()関数で「親」へのnull参照ポインターエラーも発生します...ただし、たまにしか発生しません。この2つの問題の一方を修正すれば、もう一方も修正されると思いますが、よくわかりません。