Java Brickbreaker paddle碰撞检测

时间:2013-08-24 11:34:54

标签: java collision-detection java-2d

我正在尝试制作一款破砖游戏,但在碰撞检测方面我遇到了一些问题。如果你曾经玩过破砖机你知道在球拍上,如果球向左移动而你击中顶部的左侧,那么它继续向右移动。虽然,如果你在这种情况下在右侧击球,那么球会改变方向。而且如果你在桨的侧面碰到它,它会在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);
    }
}

当球被击中的时候会发生什么事情,直接穿过球拍到达整个地方,当它到达另一端时,球会上升或下降!

1 个答案:

答案 0 :(得分:1)

你必须让球反弹,对吧?

让我们看一个例子。认为顶部正方形是球(我不能画那么好)。当球从左侧碰撞时,它应向右移动,如果它从右侧移动,则向左移动。

enter image description here

你可以通过简单的事情实现这一目标。不要改变水平速度,而是改变垂直速度。

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

简单吧!

现在让我们弄清楚如何对砖块进行弹跳效果。

enter image description here

这是球击中砖的情况。红色区域是交叉点。现在仔细注意一下。

  • 如果交叉点宽度大于交叉点高度,则球会撞到砖块的底部或垂直两侧。

  • 如果交叉点高度大于交叉点宽度,那么它就是水平碰撞。

所以我们必须先计算交叉矩形。使用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());
}

就是这样,你应该让它完全正常运作。