Java碎砖机桨叶碰撞检测
我正在尝试制作一个砖块破解游戏,在碰撞检测方面遇到了一些问题。如果你曾经玩过破砖游戏,你知道在划桨时,如果球向左移动,你击中顶部的左侧,那么它会继续向右移动。不过,如果你在这种情况下从右侧击球,那么球的方向会改变。而且,如果你在桨的侧面击打它,它会在Y轴上反弹。由于我不知道如何制作桨叶的顶部,我无法向您显示代码,因为我没有:)这是我用于侧面的代码:Java碎砖机桨叶碰撞检测,java,collision-detection,java-2d,Java,Collision Detection,Java 2d,我正在尝试制作一个砖块破解游戏,在碰撞检测方面遇到了一些问题。如果你曾经玩过破砖游戏,你知道在划桨时,如果球向左移动,你击中顶部的左侧,那么它会继续向右移动。不过,如果你在这种情况下从右侧击球,那么球的方向会改变。而且,如果你在桨的侧面击打它,它会在Y轴上反弹。由于我不知道如何制作桨叶的顶部,我无法向您显示代码,因为我没有:)这是我用于侧面的代码: Rectangle rect1 = new Rectangle((int) paddleDir, 570, imsLoader.getImage("
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);
}
}
发生的情况是,当球从侧面被击中时,正好穿过划桨,划过整个位置,当球到达另一端时,它要么上升,要么下降 你必须让球反弹,对吗 让我们看一个例子。把上面的正方形当作球(我画得不好)。当球从左侧碰撞时,它应该向右移动,如果是从右侧碰撞,则向左移动 你可以通过一件简单的事情来实现这一点。不要改变水平方向的速度,而要改变垂直方向的速度
if (ball.getBounds().intersects(paddle.getBounds()))
{
ball.setVy(-ball.getVy());
}
放松点,对
现在,让我们了解如何在砖块上实现反弹效果
这是一个球击中砖块的场景。红色区域是交叉点。现在请仔细注意
- 如果交叉点宽度大于交叉点高度,则球击中了砖的底部或垂直侧
- 如果交点高度大于交点宽度,则为水平碰撞
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());
}
就是这样,您应该让它功能齐全。这是一个令人惊讶的答案!非常感谢你!我在程序上试过了,效果非常好。我唯一改变的是,我也在划桨上增加了侧面弹跳。当我发布程序时,请检查我的网站!这是一个很好的解决方案,但是当球击中边缘时,它可能会出错。你有办法解决这个问题吗?