私は小さな2Dゲームエンジンを開発しています。文字には、現在次のことを行うpaintメソッドがあります。
- 速度などに応じてキャラクターの新しい位置を計算します。
- コリジョングリッドセルを更新します**
- 新しい位置にキャラクターを描く
**交差点チェックの回数を減らすために衝突グリッドを作成しました
今、衝突を検出するために私が考えた基本的なアルゴリズムは次のとおりです。
For Each Character
Check intersection with characters in surrounding 8 cells
このメソッドをpaintメソッドに配置するだけです。しかし、ここに私が予想する問題があります。
2つの文字AとBが衝突グリッドの隣接するセルにあるとします。これで、上記のアルゴリズムに従って、文字Aの反復でBと衝突したことが検出されます。文字Bの反復で、文字Aと衝突したことが検出されます。
しかし、AがBと衝突したことをAが検出すると、Aと衝突したことをBに通知する必要があるという考えがあります。これにより、衝突するアクタが2人以上いる場合に多くの比較を保存できます。しかし、私はこれをどのように扱うかわかりません。すべてのキャラクターが衝突をチェックする代わりに、ゲームループ内で衝突をチェックする必要があると思います。
このアプローチは正しいでしょうか?この種の問題をどのように処理しましたか?衝突グリッドのことは自分で考えました。コリジョングリッドロジックに代わるものはありますか?