【发布时间】:2014-01-15 00:16:47
【问题描述】:
我正在做一个小模拟,其中一个球与其他物体(例如矩形)发生碰撞。我的主循环如下所示:
while (true) {
entities.update(); // update all entities (e.g. ball, rectangles), move them
updateCollision(); // check for collision and inform colliding objects
}
在涉及球和只有一个物体的碰撞的情况下,一切正常。球根据实施的物理反弹。但是,当碰撞系统检测到球同时与多个矩形碰撞时,它就不起作用了。为什么 ?当球击中矩形时,它会改变它的方向,就可以了。但是当球碰到两个矩形时,它会因与第一个矩形的碰撞而改变方向,然后又会因与第二个矩形的碰撞而再次改变方向。所以当这两个矩形非常接近,球同时落下并击中它们时,球的方向改变了两次,所以最后它根本不会改变。这一切都发生在 updateCollision() 函数的循环中的一次迭代中。如何改进此机制以使其正常工作?我会很感激任何想法。
【问题讨论】:
-
很难想象你在那里做了什么。但是,如果您收集球的所有碰撞,例如当前向量和增量,然后将重复项分箱,您将到达您想要的位置。您还可以对增量求和,这样您也可以到达游戏区域的角落等等。
标签: collision