【发布时间】:2014-04-26 12:46:12
【问题描述】:
我正在测试四叉树中众多移动方块之间的碰撞。
当两个正方形碰撞时,我反转它们的速度,如下所示:
for (auto pair : collisionPairs)
{
auto& square1 = static_cast<Square&>(*(pair.first));
auto& square2 = static_cast<Square&>(*(pair.second));
square1.setVelocity(-square1.getVelocity());
square2.setVelocity(-square2.getVelocity());
}
问题是,碰撞检测并不总是在一帧内。
有时,它们在同一格子之间的碰撞不止一帧,因为格子已经相交很深。
所以正方形重叠并且它们不断地反转它们的速度,这导致速度为 0 (-velocity + velocity = 0)
我该如何解决这个问题?
编辑:我发现深度交叉问题是由我的四叉树引起的,我忘记检查与子树对象的碰撞。
现在它仍然会发生,但很少发生,例如 100 次碰撞中的 1 次,之前是 100 次碰撞中的约 20 次
【问题讨论】:
-
也许您也应该修改它们的位置,以便它们在开始朝新方向移动之前不再重叠。
-
更新:请看我的编辑。 (我稍后会接受其中一个答案,因为似乎有几种解决方法。)
-
请不要发布代码链接!将其缩小到相关部分并在您的问题中显示。
标签: c++ collision sfml quadtree