1

衝突検出のトピックを検索しましたが、それらはすべて検出自体に関するものでした。私の質問は、検出プロセスの前後についてです。私は最初の大きなゲームを書いていますが、できるだけ効率的にしたいと思っています。

ゲームの前提は、競技場で船を飛ばすことです。このフィールドでは、環境によって提供されるさまざまな性質の障害物、敵の船、および宇宙を飛び回る発射体が発生します。オブジェクトは、必要に応じて、または必要に応じて、中心などを中心に回転できます。

テストをセットアップするための私の考えは、オブジェクトが何らかの方法でキューとリストに読み込まれるようにすることです。次に、ゲームはキューの先頭にあるものをすべて取得し、リスト内のすべてのものに対してテストします。最初に、リスト内のものがそれ自体ではないことを確認します(これにより、常にすべての衝突が発生します笑)。次に、ゲームは、キュー内のオブジェクトとリスト内のオブジェクトの間に衝突があるかどうかを確認します。衝突が発生した場合、衝突したことを示すフラグがオブジェクトに付けられ、参照またはオブジェクトが衝突したものすべてが保存されます。

たとえば、A が B と衝突した場合、ゲームは A に衝突関数を実行し、B に衝突関数を実行するように指示し、B への参照を A に格納し、B は A への参照を格納します。

ゲームは、オブジェクトがリストを通過するまで、キュー内のオブジェクトの衝突をチェックし続け、オブジェクトが複数のオブジェクトにぶつかったり、ぶつかったりするたびに上記の処理を行います。

たとえば、A、B、C の 3 つのボールがあり、同じフレーム内で B と C の両方が A に当たった場合、A の速度は B によって変更され、次に C によって変更され、B と C は次のようになります。 A によって変更された速度を持っています。

これは、これを行うための賢明な方法でしょうか? 現在、衝突の実際の検出については心配していません。利用可能な記事やチュートリアルがたくさんあり、その問題を解決するための私自身の考えもあります。前後に話すものに出くわしたことはありません。キューとリスト内のどれだけのものが大量の負荷を引き起こし、ゲームの速度が低下し始めるかはわかりません. 現在、私のオブジェクトはすべて、x、y 位置、x、y 速度、それらが向いている方向、およびその他のいくつかのものです。

今、私は関係のないことについてとりとめ始めていると思います。洞察や知恵をいただければ幸いです。

4

1 に答える 1

2

多くのゲーム開発トピックに関して、これに対する一般的な答えはなく、ゲームの種類によって異なりますが、オブジェクトのトラバーサルに関しては、いくつかのことに留意してください。

  • 衝突検出後の実際の反応をどのように行うかを考えてみてください (ダブルディスパッチ、ビジター、ダウンキャスト/rtti を使用するか、関数マップで使用できる特性を保存するか、...)。複数の手法があり、すべてに長所と短所があります。選択した方法は、実際のトラバーサルの方法に反映されます。
  • オブジェクトの種類ごとにシーンを分割してみてください。たとえば、決して動かない静的オブジェクトが多数ある場合、それらすべてを相互にテストするのはばかげているため、これらを分離する必要があります。ただし、経験則として、これをあまり特化しようとしないでください。vs のようなものをstatic使用dynamicすると、おそらく大きな利点が得られます。100 の型を使用すると、通常は実際の利益が得られないメンテナンス地獄が生成されます。
  • これは、オクルージョン メカニズムに関連している可能性があります。たとえば、ポータルベースの場合、異なるセルのオブジェクトが衝突することはまずありません。

これは複雑なトピックであるため、おそらく他にも忘れているヒントがあると思いますが、うまくいくことを願っています。

于 2012-04-27T16:49:44.787 に答える