我的游戏(BrickBraker)中有以下代码,用底部的栏检查球的collsion。但它仍然表示,即使球未击中杆也会发生碰撞。
我在下面使用的代码有什么问题?
if(ball.x + ball.getWidth() > bar.x && ball.x < bar.x + (bar.getWidth()/5)) {
...
}
else if(ball.x + ball.getWidth() > bar.x + (bar.getWidth()/5) && ball.x < bar.x + (2*bar.getWidth()/5)) {
...
}
else if(ball.x + ball.getWidth() > bar.x + (2*bar.getWidth()/5) && ball.x < bar.x + (3*bar.getWidth()/5)) {
...
}
else if(ball.x + ball.getWidth() > bar.x + (3*bar.getWidth()/5) && ball.x < bar.x + (4*bar.getWidth()/5)) {
...
}
else if(ball.x + ball.getWidth() > bar.x + (4*bar.getWidth()/5) && ball.x < bar.x + bar.getWidth()) {
...
}
答案 0 :(得分:1)
以下是我将如何检查球与棋盘之间的碰撞检测:
首先,我们将检查球是否与x轴上的板“碰撞”。我们必须检查三种状态:
这是一个让它变得可视化的图像:
这是我们以编程方式应用这些规则的方式:
// First case
if(ball.getX() + ball.getWidth() > board.getX() && ball.getX() < board.getX()) {
}
// Second case
if(ball.getX() < board.getX() + board.getWidth() && ball.getX() + ball.getWidth > board.getX()) {
}
// Third case
if((ball.getX() + ball.getWidth() > board.getX() && ball.getX() < board.getX()) && (ball.getX() < board.getX() + board.getWidth() && ball.getX() + ball.getWidth > board.getX())) {
}
如果满足任何这些条件,则表示球在x轴上与电路板对齐。所以现在我们必须检查它们是否在y轴上对齐,这样我们才能最终知道它们是否相互接触。
如果符合条件,我们可以创建一个可以从任何if语句调用的方法。
public boolean checkYAlignment() {
// Check y alignment
if(ball.getY == board.getY || ball.getY() < board.getY()) {
// The ball and board have collided!
return true;
}
else {
return false;
}
}
所以现在上面写的所有代码都以一个方法的形式放在一起,这个方法将返回一个布尔值,表明球和棋盘是否发生了碰撞:
public boolean checkCollision() {
// First case
if(ball.getX() + ball.getWidth() > board.getX() && ball.getX() < board.getX()) {
return checkYAlignment();
}
// Second case
else if(ball.getX() < board.getX() + board.getWidth() && ball.getX() + ball.getWidth > board.getX()) {
return checkYAlignment();
}
// Third case
else if((ball.getX() + ball.getWidth() > board.getX() && ball.getX() < board.getX()) && (ball.getX() < board.getX() + board.getWidth() && ball.getX() + ball.getWidth > board.getX())) {
return checkYAlignment();
}
else {
return false;
}
}
我希望这有帮助并有效!
PS:我写的很晚,请原谅我,如果我出错了,我会尽快纠正。<强>更新强>
如果你想让球在与球板碰撞时以一定角度跳跃,你可以采取球与棋盘碰撞的角度,并让球以另一个方向以该角度反弹。 有两种方法可以做到这一点:
我希望这有帮助!