良好的2D碰撞响应参考

时间:2010-07-15 00:13:54

标签: collision-detection game-engine game-physics

嘿,我目前正在寻找在2D视频游戏中实现碰撞响应的各种方法,类似于本教程Metanet:N Tutorial我想在XNA中实现一些东西,但任何语言都是精细。我对以编程方式实施比对实际理论更感兴趣。我更喜欢更适合初学者的材料,但我确实欢迎更多高级主题。

那么有人会建议一些很好的2D碰撞响应文章/书吗?

(PS:我对回答比对检测更感兴趣)

7 个答案:

答案 0 :(得分:15)

您提到的N tutorial是一个很好的资源。我还推荐非常好的文章2D Polygon Collision Detection。它带有一个很棒的C#实现和使用分离轴定理进行多边形碰撞检测的示例,并更好地解释了一些概念。

就响应碰撞而言,它取决于场景。对于游戏,您可能需要根据当前速度检查可能的碰撞,然后只需调整实际速度以防止碰撞。你也可以实现某种“反弹”效果。无论如何,它可能会调整物体的速度和方向。

您可以使用分离轴定理进行碰撞检测,还可以使用多边形投影查找特定轴上目标的距离。 (大多数时候你移动的矢量)。

答案 1 :(得分:3)

我真的很喜欢这个,它刚刚在一周前到达了,你可能想要的一切都不能做相对论效果:

http://www.amazon.com/Physics-Game-Programmers-Grant-Palmer/dp/159059472X

答案 2 :(得分:1)

您需要多少细节?回答其中一些问题可以帮助您消除那些无法满足您需求的软件包。

您是否需要担心物体旋转?然后你需要关注杠杆臂,角动量,惯性矩和扭矩。

您是否担心变形?然后你需要进入有限元分析,压力/应变等 - 描述物体如何在内部对外力作出反应的东西。

摩擦效应怎么样?然后你需要摩擦系数,或者可能需要空气阻力的速度模型。

引力效应?电磁效应?其他力量?

答案 3 :(得分:1)

如果你想要一个碰撞响应的基本答案,这里是:

for each pair of objects that collide
    ask gently to the collision detection lib their interpenetration distance
    Apply an impulse (i.e. a force in the duration of the frame) to both objects :
        force proportional to penetration depth (you will have to tune the coef by hand)
        direction : perpendicular to the collision normal.
        application point : the collision point (approximately, since it s not a point anymore but a volume)
integrate (Euler, Verlet, )\

答案 4 :(得分:0)

物理引擎非常复杂。使用现有产品会好得多。

  • Farseer(C#,源自旧版本的Box2D)。
  • Box2d(C ++,它有.NET绑定)
  • Chipmunk(C,我认为它没有C#端口,但你可以制作一个)。

如果您想在游戏中使用物理,请使用Farseer或Box2D绑定。如果你想了解物理学,可以考虑制作Box2D的C#端口或者Chipmunk。如果你只是好奇,他们所有的代码都是开源的。

答案 5 :(得分:0)

我也在搜索相同的信息,最有用 我到目前为止找到的东西是

http://www.myphysicslab.com/collision.html

对我来说,最糟糕的事情就是这样做 没有摩擦(相切碰撞冲动 只有正常的冲动)而我认为那个 这种摩擦冲动会更好但仍然如此 没有找到教程如何正确实现 该

答案 6 :(得分:-3)