4

スプライト管理クラスと他の 2 つのクラスがあります。1 つはプレイヤー クラス、もう 1 つは敵クラスです。どちらもスプライト マネージャの子クラスです。プレイヤーと敵のクラスの衝突検出を行う方法を理解しました。しかし、私の敵はリストでインスタンス化されているため、敵同士が衝突したときに敵の衝突検出をチェックする方法がわかりません。リストを複製することを考えましたが、どうすれば適切に更新できますか? 2 つのリストに対してネストされた foreach ループを作成し、オブジェクトを比較する例を見ましたが、これが正しいかどうかはわかりません。リスト内の 2 つの項目を比較する簡単な方法はありますか?

4

1 に答える 1

6

要するに、はい。敵を他のすべての敵と比較すると、比較する必要がなくなることを考慮してください。この方法でチェックの数を最小限に抑えることができます

例(擬似コード):

for (int i=0; i < list.length; i++){
    // compare list[i] to everything subsequent enemy
    // we don't have to compare to enemies < i, because we've already
    // compared those to all other enemies
    for (int j=i+1; j < list.length; j++){
        checkcollision(list[i], list[j])
    }
}

注意点-反復中にリストの状態を変更したくないため、これらのループでリストから敵を削除しようとしないでください(foreachリストを変更しようとすると、実際には例外がスローされます)繰り返している間)。代わりに、別のリストに保存する、逆に繰り返します。

于 2012-10-31T19:32:56.853 に答える