3

弾丸として機能する1つのスプライトと複数のビットマップがあります。問題は、弾丸を非常に速く動かしたいということですが、これも衝突検出機能に問題をもたらします。その仕組みは、すべてのフレームで敵と弾丸の両方にRectを作成し、オーバーラップをチェックすることです。

弾丸が非常に速く進むと、ポイントからポイントへの「ジャンプ」のようになります。つまり、敵が小さく、弾丸が敵を「ジャンプ」した場合、気付かれることはありません。

私が知りたいのは、2つの移動するオブジェクト間で衝突が発生するかどうかを検出する方法があるかどうか、または敵が弾丸の軌道にあるかどうかを確認する方法があるかどうかです。

敵の配列をループして衝突検出を行い、そのforループの内側ですべての弾丸をループしてから、両方のrectを作成し、各敵と弾丸のRect.intersectsとの衝突をチェックします。

弾丸の方向は、1つの固定小数点とタッチ入力によって測定され、次の関数によって計算されます。

public void calcPoint(float x, float y) {
    double alfa = Math.atan(x / y);//x and y are inputs
    bulletPointX = (float) Math.sin(alfa) * speed;
    bulletPointY = (float) Math.cos(alfa) * speed;
}

私はそれを修正する方法がわかりません、そして私はそれをどのように行うか、そして例を作るためにいくつかのアイデアが欲しいです...

4

1 に答える 1

1

これを行うにはいくつかの方法がありますが、最も簡単なのはおそらく予測衝突検出です。基本的に、ムーブメントをタイムセグメントに分割し、各セグメントをチェックします。数千のオブジェクトが動き回っている場合はあまり効率的ではないかもしれませんが、ほとんどの場合は問題なく機能します。

いくつかの名前でも知られています。私が提供したリンクは基本に役立ちますが、詳細については、次の検索を行ってください。

  • フレームに依存しない衝突検出
  • 継続的な衝突検出
  • スイープテスト
于 2012-10-19T13:35:17.447 に答える