42

我正在寻找一些很好的参考资料来学习如何在游戏中建模 2d 物理。我不是在寻找一个图书馆来为我做这件事——我想思考和学习,而不是盲目地使用别人的工作。

我已经做了很多谷歌搜索,虽然我找到了一些关于 GameDev 等的教程,但我发现他们的教程很难理解,因为它们要么写得不好,要么假设我没有一定程度的数学理解' t还拥有。

具体来说——我正在寻找如何建模一个自上而下的 2d 游戏,有点像坦克格斗游戏——我想准确地建模(除其他外)加速度和速度、“组件”的热量积聚、之间的碰撞模型和关卡边界,以及导弹型武器。

网站、推荐书籍、博客、代码示例——如果它们有助于理解,都欢迎。我正在考虑使用 C# 和 F# 来构建我的游戏,因此使用这两种语言中的任何一种的代码示例都会很棒——但不要让语言阻止你发布一个好的链接。=)

编辑:我并不是说我不懂数学——更多的情况是我不知道为了理解所涉及的系统我需要知道什么,并且真的不知道如何找到资源会以通俗易懂的方式教我。

4

8 回答 8

21

这是我几年前收集的一些资源。值得注意的是 Verlet 集成。我还包括了一些我当时发现的开源和商业物理引擎的链接。这里有一篇关于这个主题的 stackoverflow 文章:2d 游戏物理?

物理方法

图书

  • “游戏物理引擎开发”,Ian Millington——我拥有这本书并强烈推荐它。本书从头开始用 C++ 构建了一个物理引擎。作者从基本的粒子物理开始,然后添加“运动定律”、约束、刚体物理等等。他自始至终都包含有据可查的源代码。

物理引擎

于 2008-10-03T07:20:45.417 回答
8


(来源:oreilly.com

O'Reilly为游戏开发者准备的物理学

于 2008-10-03T03:47:57.050 回答
7

从经验来看,实现 2D 物理引擎非常困难。我将详细介绍创建引擎时采取的几个步骤。

  1. 碰撞检测。即使您不处理 3D 世界或网络模拟,碰撞检测也可能是一个难题。对于 2D 物理,您肯定想使用分离轴定理。一旦你实施了 SAT,你就完成了引擎的动态部分的一半。

  2. 运动学/动力学。Chris Hecker 编写了一个出色的在线资源,它逐步引导我了解碰撞响应。

  3. 其他一切。一旦你完成了碰撞检测/响应,它的问题就是在引擎中实现你想要的一切。这可以包括摩擦力、接触力、关节以及您能想到的任何其他内容。

玩得开心!创建自己的物理模拟是一种非常有益的体验。

于 2011-03-10T22:23:13.110 回答
3

这是一个很棒的教程,它演示了使用 flash 的 2D 物理概念,并不特定于 flash。 http://www.rodedev.com/tutorials/gamephysics/game_physics.swf

于 2008-10-14T20:44:18.907 回答
3

即使您想自下而上地学习它,一个编码和文档都很好的开源物理库包含的信息远比一本书多。我该如何处理情况 x... 在文件中查找可以比纸质索引更快。

原始回复:

什么,没有提到Box2D?它是暴雪员工的开源项目,有一个很好的社区,而且效果很好。

在我对 Box2D 的(简要)体验中,将它与 Torque Game Builder 集成,我发现 API 干净易用,文档清晰,它支持我期望的所有物理对象(特别是关节是必需的),并且社区看起来很友好并且活跃(大约在 2010 年初的某个时候)。

从论坛海报来看,经理们似乎也乐于接受源贡献(不携带许可证包袱)。

它的基于岛的求解器似乎相当快,正如我从它的声誉中所预期的那样,而不是我进行了任何主要的性能测试。

于 2008-10-24T00:13:28.387 回答
2

F# 有一个名为Units of Measure的功能,它可以为您进行尺寸分析,如果您弄错了,它会提供错误。例如,如果你说:

let distance : float<meters> = gravity * 3.0<seconds>

这会产生编译错误,因为重力是 < 米/秒 ^2 > 而不是 < 米 >。此外,由于 F# 只是 .NET,因此您可以在类库中编写数学/物理代码并从 C# 中引用它。

我建议您查看这些博客文章以获取更多信息:

于 2008-10-03T17:54:07.207 回答
1

这是编写您的第一个引擎的绝佳资源。它是 3D 的,但很容易转换为 2D。我知道至少有一家大公司按照本教程开发他们的内部引擎,我个人也按照他的步骤开发自己的引擎。他解释了基于弹簧/脉冲物理的所有基本物理概念,并向您展示如何编写自己的积分器。

于 2008-10-18T17:33:36.133 回答
0

F#.NET Journal发表了两篇关于此的文章:

于 2010-02-19T23:04:26.337 回答