0

私が作成したスプライトがそれぞれと衝突するとき(私はすでに衝突を把握しています)、衝突する前にあった最後のxとyの位置にテレポートして、それぞれを通過しないようにする必要があります他の。このコードを使用しようとしました。

double x, y, x2, y2;
if(!r1.intersects(r2)){
    x = z.getX();
    y = z.getY();
    x2 = z2.getX();
    y2 = z2.getY();
}
if(r1.intersects(r2)){
    z.setX(x);
    z.setY(y);
    z2.setX(x2);
    z2.setY(y2);
}

しかし、すべてのスプライトが互いの中にあるため、機能しません。私もこれを使ってみました。

if(r1.intersects(r2)){
    z.setX(z.getX() - 1);
    z.setY(z.getY() - 1);
    z2.setX(z2.getX() + 1);
    z2.setY(z2.getY() + 1);
}

そのコードは、スプライトが互いに通り抜けることができないようにしますが、最初は互いに衝突するスプライトが多いため、スポーンする最初のスプライトが後のスプライトよりもはるかに高速になるようにします。

4

1 に答える 1

1

これらのスプライトは単純な円よりも複雑だと思いますか? また、「境界ボックス」の衝突検出を実装していると仮定しています。

その場合は、衝突が検出された後にベクトルを計算します。ベクトルは、各スプライトが中心点に対してどれだけ交差したかの大きさになります。次に、各スプライトをベクトルに沿って反対方向に移動し、交差した距離に応じてスケーリングできます。これにより、各スプライトがちょうど接触するように配置されます。

各スプライトがフレームごとに 1 ピクセル以上移動している場合、各スプライトの最後の位置が数十ピクセル離れている可能性があるため、これは優れたソリューションです。実際に衝突したようには見えません。

..これは、複雑なスプライトと単純な円の両方で機能します。

于 2013-04-26T21:42:53.070 に答える