我正在构建一个简单的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的方向
所以,我找到了更好的解决方案。 有人帮吗?非常感谢!
答案 0 :(得分:0)
我可以为您的案例提供一些指导,而无需深入研究方程式。
你要达到的目标的重要方面是移动球的接触点和方向(注意你的情况有点假设,因为两个球的质量和速度通常很重要)
您可以在两个球之间的接触点处绘制一条假想的切线,并将其视为反射面。考虑到这一点,您可以根据移动球的方向计算反射角度(see the attached picture)。