1

レンガ造りのゲームを作成しようとしていますが、衝突検出に関していくつかの問題に遭遇しました。ブリック ブレーカーをプレイしたことがある場合は、パドルでボールが左に移動しているときにトップの左側を打った場合、ボールは右に移動し続けることを知っています。ただし、この場合右側に当てると、ボールの方向が変わります。また、パドルの側面に当てると、Y 軸で跳ね返ります。パドルの上部の作り方がわからないので、コードを持っていないのでお見せできません:) これは私が側面に使用しているコードです:

Rectangle rect1 = new Rectangle((int) paddleDir, 570, imsLoader.getImage("paddle1").getWidth(), imsLoader.getImage("paddle1").getHeight());
Rectangle rect2 = new Rectangle((int) ballX, (int) ballY, imsLoader.getImage("ball").getWidth(), imsLoader.getImage("ball").getHeight());
if (rect1.intersects(rect2))
{
    if (rect1.x == rect2.getMaxX() || rect1.getMaxX() == rect2.x)
    {
        ballVX = -ballVX;
        clipsLoader.play("pattleHit", false);
    }
    else
    {
        ballVY = -ballVY;
        ballY += 0.05;
        clipsLoader.play("pattleHit", false);
    }
}

何が起こるかというと、ボールが側面にぶつかると、パドルを通り抜けてあちこちに行き、反対側の端に到達すると、上または下になります!

4

1 に答える 1

2

ボールをバウンドさせなければなりませんよね?

例を見てみましょう。一番上の四角をボールと考えてください (私にはうまく描けません)。ボールが左から衝突した場合は右に移動し、右から衝突した場合は左に移動します。

ここに画像の説明を入力

これは簡単なことで実現できます。水平方向の速度を変更しないで、代わりに垂直方向の速度を逆にします。

if (ball.getBounds().intersects(paddle.getBounds()))
{
    ball.setVy(-ball.getVy());
}

簡単ですよね!

レンガにバウンス効果を与える方法を考えてみましょう。

ここに画像の説明を入力

これは、ボールがレンガに当たったときのシナリオです。赤い部分が交差点です。今、注意深く注意してください。

  • 交点の幅が交点の高さよりも大きい場合、ボールはレンガの下部または垂直方向の側面に当たります。

  • 交差点の高さが交差点の幅よりも大きい場合は、水平方向の衝突です。

したがって、最初に交差長方形を計算する必要があります。Javaを使えばとても簡単です。

Rectangle intersection = ball.getBounds().intersection(brick.getBounds());

それでは、バウンスを実装しましょう。

if (intersection.width >= intersection.height)
{
    ball.setVy(-ball.getVy());
}

if (intersection.height >= intersection.width)
{
    ball.setVx(-ball.getVx());
}

以上で、完全に機能するはずです。

于 2013-08-24T11:52:29.883 に答える