2014-01-15 73 views
0

我正在进行一个小球模拟,其中球与其他物体(例如矩形)相碰撞。我的主循环看起来像这样:与多个物体碰撞

while (true) { 
    entities.update(); // update all entities (e.g. ball, rectangles), move them 

    updateCollision(); // check for collision and inform colliding objects 
} 

在碰撞涉及球和只有一个对象的情况下,一切正常工作。球根据实施的物理学反弹。然而,当碰撞系统检测到球与多个矩形同时碰撞时,它不起作用。为什么?当球击中矩形时,它会改变方向并且没关系。但是当球击中两个矩形时,它的变化方向是与第一个矩形碰撞的结果,然后由于与第二个矩形碰撞而再次改变方向。所以当这两个长方形非常接近并且球落下并同时击中它们时,球的方向会改变两次,所以最后它根本不会改变。这一切都发生在updateCollision()函数的循环中的一次迭代中。我该如何改进这种机制才能正常工作?我会欣赏任何想法。

+0

很难想像你做了什么没有。但是,如果你收集球的所有碰撞,例如当前矢量和三角洲,然后将重复的垃圾箱,你会得到你想要的位置。您还可以对三角洲进行求和,以便您可以在游戏区域的角落等等。 –

回答

0

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

看到这个职位,并采取到你的问题:Ball to Ball Collision - Detection and Handling