碰撞检测,“推出”的替代方案

时间:2010-04-06 08:04:33

标签: geometry collision-detection

我正在物理引擎中移动一个角色(椭圆体)。移动必须受静态几何体的约束,但应在边缘上滑动,因此不会卡住。

我目前的做法是将其移动一点,然后将其推出几何体。它似乎有效,但我认为这主要是因为运气。我担心必须有一些角落的情况,这种方法会变得混乱。例如,一个尖锐的角落,两个墙壁不断将角色推入彼此。

“最先进的”游戏引擎如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

考虑使用第三方物理库,如Chipmunk-physics或Box2D。谈到游戏物理学,除了最基本的东西之外的任何事情都可能非常复杂,而且没有必要重新发明轮子。

通常,您提到的问题是通过确定重叠量,接触点和表面法线来解决的(例如,通过使用分离轴定理)。然后计算并应用脉冲,这会改变物体速度,以便在下一次迭代中物体以物理逼真的方式移开。

答案 1 :(得分:1)

我还没有开发出最先进的游戏引擎,但我曾经写过一款赛车游戏,通过扭转模拟时间并计算边缘交叉的位置来简单地处理碰撞。然后汽车被允许反弹回到比赛场地。罚款是控制被禁用,直到汽车停止。

所以我的建议是你运行你的物理引擎来精确计算边缘被击中的位置(它可能需要一些非线性方程求解方法),然后你将速度矢量改变为反弹或跟随边缘。 / p>

在防止角落情况的情况下,可以始终保持游戏中的最后有效位置的历史和物理引擎的状态。如果游戏卡住,可以从该点重新开始模拟但是条件不同(例如,通过向内部参数添加一些随机化)。