我正在尝试制作一款破砖游戏,但在碰撞检测方面我遇到了一些问题。如果你曾经玩过破砖机你知道在球拍上,如果球向左移动而你击中顶部的左侧,那么它继续向右移动。虽然,如果你在这种情况下在右侧击球,那么球会改变方向。而且如果你在桨的侧面碰到它,它会在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);
}
}
当球被击中的时候会发生什么事情,直接穿过球拍到达整个地方,当它到达另一端时,球会上升或下降!
答案 0 :(得分:1)
你必须让球反弹,对吧?
让我们看一个例子。认为顶部正方形是球(我不能画那么好)。当球从左侧碰撞时,它应向右移动,如果它从右侧移动,则向左移动。
你可以通过简单的事情实现这一目标。不要改变水平速度,而是改变垂直速度。
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());
}
就是这样,你应该让它完全正常运作。