以下是我将尝试检查球和电路板之间的碰撞检测:
首先我们要检查是否球已经“碰撞”与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:我写这个很晚,如果我有什么不对,我会尽量纠正它。
更新:
如果你想让球以一个角度跳跃时球与板碰撞,你把那个球与板碰撞的角度,让它在那个角度弹开另一个方向。 有两种方法可以做到这一点:
- 使用一些三角法来找到角度。
- 你也可以简单地采取球的x速度,并将 数字改为正数或负数,例如。如果速度是负值,那么 使其为正,反之亦然。
我希望这有助于!
Ty为您的答案。但是如果击球板的左侧,我想让球移向左侧。这就是为什么我这样做。你有一个聪明的解决方案吗? – Stupe 2012-08-05 22:52:32