【问题标题】:Collision with more than one objects与多个物体发生碰撞
【发布时间】: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


【解决方案1】:

也许你应该同时更新你的速度。当您将速度表示为向量时,您可以计算所有碰撞更新,然后将这些更新线性组合成一个更新。

查看这篇文章并将其应用于您的问题:Ball to Ball Collision - Detection and Handling

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多