圆圈碰撞解决问题

时间:2014-09-15 19:17:14

标签: c++ collision-detection direct2d

我有一个小应用程序我已经建立了空白背景上有几个球。它们都开始在空中飞行并使用我写的物理准确弹跳并具有逼真的碰撞响应。我很满意它的外观,除了我有一个问题,当我的球直接落在彼此的顶部,连接在一起并直接漂浮。

以下是涉及的功能

https://gist.github.com/anonymous/899d6fb255a85d8f2102

基本上如果Collision函数返回true,我会使用ResolveCollision来相应地改变它们的速度。

我认为问题来自于我在ResolveCollision()中的轻微重新定位。如果它们发生碰撞,我会在它们的位置向后移动一帧,这样它们就不会在下一帧相交。然而,当它们直接在顶部时,它们会以如此小的弹跳相互反弹,最终踩到一个框架并不足以解开它们。

我不确定这是否是问题,如果是,那该怎么办。

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:2)

如果圆圈彼此远离,诀窍是忽略碰撞。只要你的时间步长相对于它们的速度足够小(即圆圈不能在一个帧中相互穿过),这就可以工作。

当圆圈首次碰撞时,您将调整它们的速度矢量,使它们的相对速度矢量将它们分开(因为碰撞会这样做)。在那之后,任何进一步的碰撞都是虚假的,因为圆圈会分开,并最终完全分开。所以,只要忽略分开的对象之间的碰撞,你应该没问题。

(我在我编写的3D屏幕保护程序中实现了这样的算法,但该算法完全与维度无关,因此适用于2D圈子。)

相关问题