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

我在谷歌上做了很多搜索,虽然我找到了一些关于 GameDev 等的教程,但我发现他们的教程很难理解,因为它们要么写得不好,要么假设我不具备一定的数学理解水平。尚未拥有。

对于具体细节 - 我正在寻找如何建模自上而下的 2d 游戏,有点像坦克战斗游戏 - 我想准确地建模(除其他外)加速度和速度、“组件”的热量积聚、之间的碰撞型号和级别边界以及导弹类型武器。

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

编辑:我并不是说我不懂数学 - 更重要的是我不知道我需要知道什么才能理解所涉及的系统,并且真的不知道如何找到可以教授的资源我以一种可以理解的方式。

有帮助吗?

解决方案

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

物理方法

图书

  • 《游戏物理引擎开发》, ,伊恩·米林顿——我拥有这本书并强烈推荐它。本书从头开始用 C++ 构建了一个物理引擎。作者从基本粒子物理学开始,然后添加“运动定律”、约束、刚体物理学等等。他自始至终都包含有详细记录的源代码。

物理引擎

其他提示


(来源: oreilly.com

O'Reilly 游戏开发者物理学

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

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

  2. 运动学/动力学。克里斯·赫克 (Chris Hecker) 写了一篇出色的文章 在线资源 这一步一步引导我完成了碰撞响应。

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

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

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

即使你想从下到上学习它,一个编码和记录良好的开源物理库包含的信息远远多于一本书。我如何处理情况x ...在文件中查找可能比纸质索引更快。

原始回复:

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

在我对Box2D的简要体验中,将它与Torque Game Builder集成,我发现API干净利用,文档清晰,它支持我所期望的所有物理对象(特别是关节是一个要求),以及社区看起来很友好和活跃(2010年初左右)。

根据论坛海报判断,管理人员似乎也接受了来源捐款(没有携带许可证行李)。

这是基于岛屿的求解器看起来非常快,正如我对它的声誉所期望的那样,而不是我做过任何重大的性能测试。

F# 有一个功能叫做 计量单位 它会为您进行尺寸分析,如果您出错则提供错误。例如,如果你说:

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

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

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

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

F#.NET 期刊 就此发表了两篇文章:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top