たくさんのスプライト (シューティング ゲーム) があり、レベル内の他の多くのオブジェクト (プレーヤー、壁、クレートなど) との衝突をテストする必要があります。フレームごとにすべてのオブジェクトに対してすべての弾丸をチェックしているため、この方法では問題が非常に明白です。速度を上げる方法については少し知っていますが、ある種の空間分割階層の実装に数日を費やす前に、ゲーム開発者の洞察 (おそらく cocos2d 固有のもの) をもう少し経験したかったのです。
どんな助けでも大歓迎です!
たくさんのスプライト (シューティング ゲーム) があり、レベル内の他の多くのオブジェクト (プレーヤー、壁、クレートなど) との衝突をテストする必要があります。フレームごとにすべてのオブジェクトに対してすべての弾丸をチェックしているため、この方法では問題が非常に明白です。速度を上げる方法については少し知っていますが、ある種の空間分割階層の実装に数日を費やす前に、ゲーム開発者の洞察 (おそらく cocos2d 固有のもの) をもう少し経験したかったのです。
どんな助けでも大歓迎です!
非常に簡単な最適化の1つは、すべてのオブジェクトを他のすべてのオブジェクトでテストしないことです。AがBとの衝突をテストする場合、これは、結果がすでに取得されているため、BがAとの衝突を行う必要がないことを意味します。
200個のオブジェクトがある場合、ブルートフォースアプローチでは、すべてのオブジェクトを相互にテストするために40,000回のテストが必要です。これを最適化して、すでに実行されたテストをスキップすると、最初のオブジェクトが他の199をテストし、2番目のオブジェクトが残りの198をテストするため(2番目のオブジェクトが最初のオブジェクトとの衝突をテストしたため)、テストの数を数千に減らすことができます。すぐ。
すべてのオブジェクトが配列内にあると仮定すると、200をすべて反復し、ループ内で電流+ 1〜200を反復します。
やり方は同じだと思います。私がしたことは、弾丸の配列をループし、そのループ内に他のスプライト配列の別のループを配置して、弾丸と他のスプライトの衝突をチェックすることです。
box2d を使用して、すべての衝突を検出して処理できます。すでに最適化を使用しています。