私は C++ (多方向 2D スペース シューティング ゲーム) で小さなアーケードのようなゲームを書いており、衝突検出部分を仕上げています。
これが私がそれをどのように整理したかです(私はそれを作ったので、それはくだらないシステムかもしれません):
すべての船は円形のコンポーネントで構成されています。各船のコンポーネントの量は任意です (コンポーネントが多いほど、CPU サイクルが多くなります)。船の作成時に計算する maxComponent 距離があります。これは基本的に、船の中心から最も遠いコンポーネントの端まで描画できる最長の線です。画面上の要素を追跡し、この maxComponentDistance を使用して、衝突するほど接近しているかどうかを確認します。
それらが近接している場合は、異なる船のコンポーネントが交差しているかどうかを確認し始めます。ここで、私の効率性の問題が出てきます。
船の中心に対するコンポーネントの (x,y) 位置がありますが、船が現在どのように回転しているかは考慮されていません。船が移動するたびにコンポーネントを再計算する必要がないため、それらを相対的に保ちます。そのため、回転計算のための小さな式があり、船の中心に対する回転を考慮した位置に対応する 2 次元ベクトルを返します。
衝突検出は GameEngine にあり、2d ベクトルを使用します。私の質問は、戻り値の型についてです。関数が呼び出されるたびに 2d-vector オブジェクトを作成して返す必要がありますか、それとも、そのコンポーネント オブジェクトに追加のプライベート 2d-vector 変数を与え、関数が呼び出されたときにプライベート変数を編集し、そのオブジェクトへのポインターを返す必要がありますか?
メモリ割り当ての効率と、永続的で編集可能なプライベート変数を持つことの効率についてはわかりません。プライベート変数にもメモリを割り当てる必要があることはわかっていますが、衝突をチェックするたびにではなく、新しいコンポーネントが作成されたときだけです。コンポーネントは船が破壊されると削除されるため、私の環境では一定ではありません。
それが私の主なジレンマです。また、実際の衝突検出システムの設計に関する指針もいただければ幸いです。ハックするのは初めてです(少し読んでおくべきだったかもしれません)
前もって感謝します。