-4
    for (int x = bulletBounds.Count - 1; x > -1; x-- )
        {
            for (int y = alienPosition.Count - 1; y > -1; y--)
            {
                if (bulletBounds[x].Intersects(alienBounds[y]))
                {
                    alienPosition.RemoveAt(y);
                    bulletBounds.RemoveAt(x);
                    hit++;
                }
            }
        }

このコードで私がやろうとしているのは、オブジェクトの両方のリストを調べて、それらが衝突するかどうかを確認することです。別の質問で、これを行う唯一の方法はリストを逆方向に反復することだとわかったので、そうしました。現在の問題は、弾丸がエイリアンと衝突すると、リスト内のそれより前のすべてのエイリアンも削除されることです. 画面に 6 体のエイリアンがいて、一番左のエイリアンを攻撃すると、その右にあるすべてのエイリアンが削除されます。これを修正するにはどうすればよいですか?

4

2 に答える 2

0

エイリアンと弾丸を取り除いた後、内側のループから抜け出す必要があります。

 if (bulletBounds[x].Intersects(alienBounds[y]))
 {
     alienPosition.RemoveAt(y);
     alienBounds.RemoveAt(y);
     bulletBounds.RemoveAt(x);
     hit++;
     break;
 }
于 2013-04-10T04:32:41.643 に答える
0

break;if ループに追加します。ところで、エイリアンバウンドとエイリアンポジションの違いは何ですか? ただし、alienPosition をループして、alienBounds のデータにアクセスしています。以下の例では、alienBounds をループしています。何か誤解した場合はお知らせください。それに応じて回答を更新します。

foreach (var bullet in bulletBounds)
{
    foreach (var alien in alienBounds)
    {
        if (bullet.Intersects(alien))
        {
            bulletBounds.Remove(bullet);
            alienBounds.Remove(alien);
            break;
        }
    }
}

お役に立てれば!

于 2013-04-10T05:02:39.440 に答える