同じオブジェクトを持つリスト内のオブジェクトをチェックする際に問題があります。弾丸、敵、ランダムな背景オブジェクトなど、さまざまな種類のオブジェクトを含むオブジェクト リストがあります。ここで、弾丸と敵のように、いくつかのオブジェクトが互いに衝突するかどうかを確認したいと思います。問題は、同じオブジェクトを使用して for ループ内に同じ for ループを配置すると、期待していた動作が得られないことです...これを処理するより良い方法を知っている人はいますか?
左の画像は弾丸が動かなくなったことを示し、右はループ内のループを削除したときの状況を示しています。
https://www.dropbox.com/s/92tnxizxdneqgz3/ss1.png
編集:さまざまな文字列がスクリプトから読み取られます。最大限の柔軟性を目指しています。これが、オブジェクトの種類ごとに異なるコレクションを必要としない理由でもあります。私がそれをしたとき、衝突は機能していました。
for (Object o : objects) {
if (o.behavior.equals("aggressive")) {
o.aggressive(ship.x, ship.y, ship.z);
}
if (o.behavior.equals("missile")) {
o.missile();
if (o.type.equals("bullet_player")) {
for (Object n : objects) {
//doesn't matter what i put here
}
}
}
}
解決:
問題は、配列リストの for ループを別の配列リストにネストすることにあるようです。私が最終的に行ったことは次のとおりです。配列リストを複製し、複製されたリストを元のオブジェクトリストでチェックし、オブジェクトが同じかどうかをチェックし、そうでない場合は衝突チェックを行います。