【发布时间】:2013-11-22 02:38:16
【问题描述】:
这是用 JavaFX 开发的。
有 2 个球 - 一个动态球和一个静止球。第一个球(动态)从墙壁和任何挡道的物体上反弹。
第二个球的目的是成为第一个球的障碍。因此,每当第一个球接触到第二个球时,第一个球应该立即弹开。目前,弹跳的准确性非常差,我不知道如何修复它。有时第一个球会正常弹跳,但通常它会INSIDE第二个球,卡在那里片刻,然后弹开。下图涵盖了这个确切的问题。
这是我检测碰撞并做出响应的代码:
//Pythagorean Theorem, to detect collision, by estimating the distance between the two circles
double dx = circle.getLayoutX() - circle2.getLayoutX();
double dy = circle.getLayoutY() - circle2.getLayoutY();
double radii = circle.getRadius() + circle2.getRadius();
double distance = (dx * dx) + (dy * dy);
double minDistance = radii * radii;
// I believe something is missing in the lines below, which is causing the problem.
if (distance < minDistance) { //If circle1(dynamic) collides with circle2(stationary)
c1SpeedX = c1SpeedX * -1; //Inverts direction.
}
我在谷歌上花了几个小时,但我找不到答案。我希望有人可以提供解决方案并解释问题。非常感谢大家!
【问题讨论】:
-
逻辑上你不想要
distant <= minDistance吗?我还没有查看所有细节,但这让我觉得很奇怪。具有讽刺意味的是,有人提出了类似的问题:stackoverflow.com/questions/4613345/… -
标签: java 2d collision-detection physics