こんにちはstackoverflowians〜!
トレイル中に問題に遭遇したのは、孤独なプログラマーである私です。問題はこのコードにあることがわかります。
for(var a = 0; a < bullets.length; a++) {
for(var b = 0; b < pigs.length; b++) {
if(bullets[a].y < 300) {
if(bullets[a].x > pigs[b].x && bullets[a].x < pigs[b].x + pigImage.width &&
bullets[a].y > pigs[b].y && bullets[a].y < pigs[b].y + pigImage.height) {
pigExplode(pigs[b].x);
bullets.pop(a);
pigs.pop(b);
player.kills++;
}
}
}
}
問題は以下の通り。内部にオブジェクトを含む2つの配列があります。すべての弾丸オブジェクトを保持する 1 つの配列 Bullets と、すべての豚 (私のゲームで撃つターゲット) を保持する 1 つの配列 Pigs (ただし、私は決して豚を撃つことをお勧めしません)
今私がやろうとしているのは、配列内の弾丸の 1 つが配列内の豚の 1 つに当たるかどうかを確認することです。豚と弾丸を次のように配列に追加しました。
bullets.push(new Bullet());
pigs.push(new Pig());
5 匹の豚がいるとしましょう。
それは 0, 1, 2, 3, 4 です。豚 2 を撃ったら、4 は死ぬでしょう。豚1を撃ったら4。もし私が豚 4 を撃ったら、4 は死ぬでしょう。
したがって、誰を撃っても、最後の豚は常に削除されます。この問題で発生するエラーは次のとおりです。
Uncaught TypeError: Cannot read property 'y' of undefined
それが示す行は次のとおりです。
if(bullets[a].y < 300) {
これは、豚に弾丸が当たっていないかどうかをチェックする二重の for ループにあります。ただし、エラーは、配列の最後ではない豚に当たったときにのみポップアップします。
私のコードで何が起こっているのか誰にも分かりませんか? 私はこれを数日間扱ってきましたが、何が間違っているのかわかりません。前もって感謝します!