2D游戏物理资源

42

我正在寻找一些好的资料来学习如何在游戏中建立2D物理模型。我并不需要一个库来替我完成 - 我想要思考和学习,而不是盲目地使用别人的成果。

我搜索了很多,虽然在GameDev等网站上找到了一些教程,但由于它们要么写得不好,要么假定我已经有一定的数学理解能力,所以我觉得很难懂。

具体来说 - 我想要建立一个类似坦克战斗游戏的俯视角度的2D游戏,并且我希望能够准确地模拟(包括但不限于)加速度、速度、'构件'的热积聚、模型与关卡边界之间的碰撞以及导弹等武器。

如果能够帮助理解的话,欢迎提供网站、推荐书籍、博客、代码示例 - 所有都可以。我正在考虑使用C#和F#构建我的游戏,因此任何这两种语言的代码示例都很棒 - 但是不要让语言成为你发帖的阻碍。=)

编辑:我的意思不是我不懂数学 - 更确切地说,我不知道需要了解哪些系统以及不知道如何找到能够以易懂的方式教授这些内容的资源。


如果你想准确地完成它,而且想自己完成,但不理解所涉及的数学知识,那么别人也无能为力。首先,你需要了解你试图建模的内容,然后才能尝试进行建模。 - Matthew Scharley
4
所以我想要关于这个主题的资源... =P - Erik Forbes
啊...抱歉,我可能误解了问题,我以为你在问如何编写代码示例...无论如何,我记得我们在11年级物理课上讲过这种东西,也许拿起一两本教科书会是一个好的开始。 - Matthew Scharley
1
维基百科上有一些链接到书籍等内容。http://en.wikipedia.org/wiki/Game_physics - Robert Paulson
我也有同样的问题,似乎很多东西需要我还没有掌握的数学理解水平。但是找到相关资料几乎是不可能的。 - Isaiah
8个回答

21

以下是我几年前收集的一些资源,其中值得注意的是Verlet积分方法。我还包括了当时找到的一些开源和商业物理引擎的链接。这个主题在stackoverflow上有一篇文章:2D 游戏物理?

物理方法

书籍

  • 《游戏物理引擎开发》,Ian Millington -- 我拥有这本书并强烈推荐它。本书从头开始用C++构建物理引擎。作者从基础粒子物理学开始,然后添加“运动定律”、约束、刚体物理等等。他提供了经过充分文档化的源代码。

物理引擎


4
我认为这应该是学校教授物理的方式。用物理知识来制作你自己的游戏。 - user6328
第二个链接(高级角色物理)已经失效;http://www.gamasutra.com/resource_guide/20030121/jacobson_01.shtml 返回404错误。=( - Erik Forbes
这是该文章的存档 - http://www.gamasutra.com/resource_guide/20030121/jacobson_pfv.htm - Erik Forbes
找到了实际的文章链接 - http://www.gamasutra.com/view/feature/131313/advanced_character_physics.php - 但不幸的是,图片无法显示,因此大部分数学内容都缺失了。=( - Erik Forbes

8

7

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

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

  2. 运动学/动力学。Chris Hecker编写了一份出色的在线资源,逐步向我展示了碰撞响应。

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

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


3
这是一个非常好的教程,使用Flash演示了2D物理学概念,并不仅限于Flash。点击此链接可以查看教程。

这绝对值得一读。简短而简洁。 - John

3
即使你想从头开始学习,一个编码和文档良好的开源物理库包含的信息比一本书更多。如何处理x情况...在文件中查找可能比纸质索引更快。
原回复:
什么?没有提到Box2D吗?它是暴雪员工的一个开源副业项目,拥有良好的社区,并且运行良好。
在我(简短的)使用Box2D与Torque Game Builder集成的经验中,我发现API易于使用,文档清晰,支持我预期的所有物理对象(特别是关节是必需的),并且社区看起来友好和活跃(大约在2010年初)。根据论坛帖子的判断,似乎管理人员也接受源代码贡献(不携带许可证负担)。
它的基于岛屿的求解器似乎相当快,正如我从它的声誉中所期望的那样,尽管我没有进行任何重大的性能测试。

2
以下是一些提示: 提供链接。 提供证据,不要只提供个人意见。个人经验可以用,但必须为您的论点提供根据,而不仅仅是“它非常有效”。 - Chris MacDonald
1
愤怒的小鸟让人想起来。Box2D是真实可信的。 - ojrac

2
F#有一个名为“度量单位”(Units of Measure)的特性,可以为您进行维度分析,如果您出错了,它会提供错误提示。例如,如果您这样说:
let distance : float<meters> = gravity * 3.0<seconds>

那会产生编译错误,因为重力是 < 米/秒^2 > 而不是 < 米 >。此外,由于 F# 只是 .NET,您可以在类库中编写数学/物理代码,并从 C# 引用它。
我建议您查看这些博客文章以获取更多信息:

我一直在考虑做这件事情 - 从C#代码中调用F#库。 - Erik Forbes

1

这是一个很好的资源,适合编写你的第一个引擎。它是在3D中实现的,但很容易转换为2D。我知道至少有一家大公司曾经按照本教程制作了他们内部的引擎,而我个人也是按照他的步骤制作了自己的引擎。他解释了所有基本的物理概念,包括弹簧/冲量物理,并向你展示如何编写自己的积分器。


1
这是一个很棒的资源-一定要查看他关于物理学的其他文章! - thekidder
2
那个链接已经失效了,这是该内容现在所在的位置:http://gafferongames.com/game-physics/spring-physics/ - batbrat

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接