0

私は現在、最初のゲームを作成中で、Javascript +HTML5Canvasで作成しています。ゲームは、WASDの動きを備えたトップダウンのポイントクリックアクションシューターです。とにかく、昨日、比較を最小限に抑えるために、円と四分木を使用した衝突検出の実装を終了しました。私はすべての弾丸、プレイヤー、敵を四分木に投げ込みます。これですべてが正常に機能していますが、実際のレベルで衝突を処理する次のステップをどのように処理するかがわかりません。弾丸は壁でブロックする必要があり、アクター(プレイヤーと敵)はフェンスと壁の両方でブロックする必要があります。

レベルの壁を表す形状を定義し、それらをクワッドツリー内のオブジェクトの形式として含める必要があります。次に、SATを使用して、衝突する可能性のあるものに対して各要素を評価するか、非表示の画像を作成するような別の方法があります。パスの輪郭を描くレイヤーを作成し、各オブジェクトの座標をテストして、黒いピクセルに着地していないことを確認します(これは、移動していない地形と衝突していることを示します)。

ありがとう。

4

1 に答える 1

0

同様の質問から:

PacManでゴーストの動きと衝突検出がどのように機能するかについて、この優れた記事を読むことをお勧めします。

次に、Bomberman のレベルをタイルのコレクションとして論理的にモデル化することをお勧めします。各タイルはレベル内の個別の位置を表しており、論理的には、タイルの「間に」あることや、同時に 2 つのタイルを占有することはありません。各タイルは、現在その上にある地形の種類と、それがプレイヤー (および敵) にとって有効な目的地タイルであるかどうかを追跡できます。プレーヤーのために)。

そうすれば、世界のすべてのオブジェクトに対して衝突検出アルゴリズムは必要ありません。敵が移動するとき、またはユーザーがキャラクターを移動しようとしたときに、現在のタイルに隣接するすべてのタイルを確認するだけです (4、または斜めの移動を許可する場合は最大 8)。各タイルが有効な移動方向を表しているかどうかを確認し、有効な方向でない場合は移動をブロックします。

そして、あなたの質問に答えるために、はい、すべての位置の更新で世界のすべてのオブジェクトを反復することは非常に非効率的です.

于 2012-04-29T20:43:30.447 に答える