私はこの小さなシューティングゲームをjavascriptで作っています。問題を起こしてしまいました。敵が生まれた後、衝突チェックループがループしなくなる
私は、生きている敵がforループを使ってプレイヤーや弾と衝突しているかどうかをチェックする衝突チェックをしています。私が敵を召喚するまでループは正常に動作します。
forループの最初には、console.log
が表示され、最初の生きている敵のindex
までしか数字が記録されません。例えば、enemies[4]
が生きていて、それ以前にindex
で他の敵が生存していない場合は、ロギングは0, 1, 2, 3
と4
のままです。私は、すべての敵を殺す場合はループが敵スポーンまで(配列の長さである)、再び完全な50時間を実行します
checkCollision: function(){
function calculate(enemy, other){
var r = enemy.r + other.r;
var dx = enemy.posX - other.posX;
var dy = enemy.posY - other.posY;
var d = Math.sqrt((dx * dx) + (dy * dy));
if(r > d){
enemy.alive = false;
other.alive = false;
return true;
}
return false;
}
for (var i = 0, max = this.enemies.length; i < max; i++) {
console.log(i);
if(this.enemies[i].alive){
if(calculate(this.enemies[i], this.player)){
continue;
}
for (var i = 0, max = this.player.weapon.bullets.length; i < max; i++){
if(this.player.weapon.bullets[i].alive){
if(calculate(this.enemies[i], this.player.weapon.bullets[i])){
break;
}
}
}
}
}
}
ここで少し視覚化したものです:。
[0] = !alive
[1] = alive
[2] = !alive
[3] = alive
[4] = alive
ここでforループは2回しか実行されないため、3と4の衝突をチェックしません。これは私がしたいことです。
敵をどのように召喚するか説明し、さらにバグを説明できますか?意図しない振る舞いやエラーメッセージがある場合でも私は確信していません... –
タイマーがあり、それが発動速度制限に達すると、最初の非生きている敵の生きているブール値を真に設定し、ゲームはその敵を更新し続けます。私はすべての生きているオブジェクト間の衝突をチェックするcollsionチェックをしたいが、そのバグのためにdoesntする。コンソールはエラーを表示しません。 – iWillBeMaster