Java 静态和动态圆之间的碰撞响应
这是用JavaFX开发的 有两个球-一个动态球和一个静止球。第一个球(动态)从墙壁和任何挡道的物体上反弹 第二个球的目的是成为第一个球的障碍物。因此,无论何时第一个球碰到第二个球,第一个球都会立即弹起。目前,弹跳的准确度很差,我不知道如何修复它。有时第一个球会正确反弹,但通常它会进入第二个球的内部,在那里停留片刻,然后反弹离开。下面的图片是关于这个问题的。 以下是我检测碰撞并作出响应的代码:Java 静态和动态圆之间的碰撞响应,java,2d,collision-detection,physics,Java,2d,Collision Detection,Physics,这是用JavaFX开发的 有两个球-一个动态球和一个静止球。第一个球(动态)从墙壁和任何挡道的物体上反弹 第二个球的目的是成为第一个球的障碍物。因此,无论何时第一个球碰到第二个球,第一个球都会立即弹起。目前,弹跳的准确度很差,我不知道如何修复它。有时第一个球会正确反弹,但通常它会进入第二个球的内部,在那里停留片刻,然后反弹离开。下面的图片是关于这个问题的。 以下是我检测碰撞并作出响应的代码: //Pythagorean Theorem, to detect collision, by e
//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.
}
//毕达哥拉斯定理,通过估计两个圆之间的距离来检测碰撞
double dx=circle.getLayoutX()-circle2.getLayoutX();
double dy=circle.getLayoutY()-circle2.getLayoutY();
双半径=圆.getRadius()+圆2.getRadius();
双距离=(dx*dx)+(dy*dy);
双眼距离=半径*半径;
//我相信下面几行中缺少了什么,这就是问题的原因。
if(距离
我花了几个小时在谷歌上,但我找不到答案。我希望有人能提供一个解决方案并解释这个问题。提前谢谢大家 这可能是因为当球的方向一次又一次地反转时,球并不总是有时间离开较大的球 如果距离==距离: 照你现在做的去做 如果距离
distance
和minDistance
应该是
double distance = Math.sqrt((dx * dx) + (dy * dy));
double minDistance = radii;
从逻辑上讲,你不想要
距离吗?我已经尝试了这两种方法,<并且sqrt操作比乘法更昂贵,这就是为什么我使用radii*radii,而不是sqrt。我认为,你应该首先确保你的代码工作正常,然后,您可以优化代码。是不是c1SpeedX
应该是c1SpeedX=c1SpeedX*-1
而不是c1SpeedX=c1SpeedX-1
?因为评论说:“反转方向”。该死,这正是我在代码中使用的方式,我复制了一个旧版本。我会把它放在主柱子上。遗憾的是,这不是问题所在,太糟糕了。需要更多信息才能找到该bug。