【发布时间】:2016-03-23 10:40:50
【问题描述】:
我正在构建一个简单的 Android 游戏。 而且我一直在检测两个球碰撞的方向。 我有一个移动球A和一个固定球B。 A 球比 B 小很多。
我不在乎两个球的质量。两个小球碰撞后,小球B消失,小球A改变方向!
我想要这样的东西..
这是我当前的代码:
private void collision(Ball a, Ball b){
if(b.isVisible){
double d = Math.sqrt((a.cx - b.cx)*(a.cx - b.cx) + (a.cy - b.cy)*(a.cy - b.cy));
if(d <= a.radius + b.radius) {
b.isVisible = false;
if(a.dx * b.dx < 0 && a.dy * b.dy < 0){
a.dx = - a.dx;
a.dy = - a.dy;
b.dx = - b.dx;
b.dy = - b.dy;
} else if(a.dx * b.dx < 0){
a.dx =- b.dx;
a.dx = - b.dx;
} else if(a.dy * b.dy < 0){
a.dy = - a.dy;
b.dy = - b.dy;
} else{
a.dx = - a.dx;
a.dy = - a.dy;
b.dx = - b.dx;
b.dy = - b.dy;
}
}
}
}
但它只是颠倒了球B的方向
所以,我正在寻找更好的解决方案。 有人帮忙吗?非常感谢!
【问题讨论】:
-
我认为您的意思是要计算方向。既然'b'会消失,为什么不把它从代码中去掉。您需要计算 A 撞击 B 的角度,因为它垂直于它会反弹的那个角度。