16

私は現在、2D シューティング タイプのゲームに取り組んでおり、衝突検出にクワッド ツリーを使用しています。アクターをツリー内の属するノード/リーフに正しくプッシュする作業クワッド ツリーを作成しました。ただし、いくつかの問題があります。

まず、クアッドツリーを実際に使用して、オブジェクトが衝突をテストする必要がある他のオブジェクトを選択するにはどうすればよいですか? これがどのように行われるかはわかりません。

2 番目の質問が表示されます。別のノードの隣接ノードではないオブジェクトがノードにあるとしますが、そのオブジェクトがいくつかのノードにまたがるほど大きい場合、実際の衝突を確認するにはどうすればよいでしょうか。 「遠く離れた」ノードのオブジェクトと衝突するのに十分近いですか?ノードに完全に収まらないオブジェクトは、親ノードに保持する必要がありますか?

私のゲームでは、ほとんどのオブジェクトがさまざまなサイズで動き回っています。

四分木に関するかなりの数のブログ/記事を読みましたが、ほとんどは、実際に探しているものではないツリーを構築する方法を説明しているだけです。

ヘルプ/情報は大歓迎です。

4

1 に答える 1

15

すべての要素が、それを完全に含む最小の四分木ノードに含まれるという規則を確立できます。

次に、ノード A の衝突を確認すると、次のように進みます。

  1. 現在のノード = ルート ノード
  2. 現在のノードで直接各要素との A の衝突をチェックします
  3. A を現在のノードのいずれかのサブノードに完全に含めることができる場合、現在のノードをそのサブノードに設定し、再び 2 に進みます
  4. 最後に、現在のノードの子ノード内のすべての要素との A の衝突を再帰的にチェックします。

オブジェクトが小さいほど、クワッド ツリーの奥深くに配置されるため、比較される頻度が低くなることに注意してください。

于 2010-12-13T23:17:12.537 に答える