16

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

那么有人可以推荐一些好的 2D 碰撞响应文章/书籍吗?

(PS:我对响应比检测更感兴趣)

4

7 回答 7

15

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

就碰撞响应而言,这取决于场景。对于游戏,您可能希望根据当前速度检查可能的碰撞,然后简单地调整实际速度以防止碰撞。您还可以实现某种“反弹”效果。在任何情况下,它都可能同时调整物体的速度和方向。

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

于 2010-08-23T04:29:06.610 回答
3

我真的很喜欢这个,它是一周前刚到货的,除了做相对论效应之外,它是你想要的一切:

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

于 2010-07-15T00:21:56.257 回答
1

你需要多少细节?回答其中一些问题将帮助您消除不符合您需要的软件包。

您是否需要担心对象旋转?然后您需要关注杠杆臂、角动量、惯性矩和扭矩。

不用担心变形吗?然后你需要进行有限元分析、应力/应变等——描述物体内部如何响应外力的东西。

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

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

于 2010-08-18T16:29:16.467 回答
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, )\
于 2010-08-24T07:23:23.597 回答
0

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

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

对我来说更糟糕的是,这是没有摩擦的(切向碰撞脉冲只有正常的脉冲),我认为有这种摩擦脉冲的会更好,但仍然没有找到如何正确实现它的教程

于 2013-05-17T09:25:55.010 回答
-1

物理引擎非常复杂。使用现有的会更好。

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

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

于 2010-07-16T17:49:42.640 回答