这是在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.
}
我在Google上花了几个小时,但我找不到答案。我希望有人能提供解决方案并解释问题。非常感谢大家!
答案 0 :(得分:1)
这可能是因为当球的方向反复颠倒时,球并不总是有时间退出更大的球。
如果距离== minDistance:
就像你现在一样。
如果距离< minDistance才会:强>
球在较大的球内。然后它应该已经反弹并且有点远。球应该已经从更大的球移动了sqrt(距离 - 最小距离)。
答案 1 :(得分:0)
嗯......
我认为你有一些公式错误。
例如,distance
和minDistance
应为
double distance = Math.sqrt((dx * dx) + (dy * dy));
double minDistance = radii;