我正在寻找一些很好的参考资料来学习如何在游戏中建模2d物理。我不寻找图书馆为我做这件事 - 我想思考和学习,而不是盲目地利用别人的工作。
我已经做了很多谷歌搜索,虽然我已经在GameDev等上找到了一些教程,但我发现他们的教程难以理解,因为它们写得不好,或者假设一定程度的数学理解我还没有。
具体而言 - 我正在寻找如何模拟自上而下的2D游戏,有点像坦克战斗游戏 - 我想准确地模拟(除其他外)加速度和速度,'组件的热量积累, “模型和等级界限之间的碰撞,以及导弹型武器。
网站,推荐书籍,博客,代码示例 - 如果有助于理解,欢迎所有人。我正在考虑使用C#和F#来构建我的游戏,所以这两种语言中的代码示例都会很棒 - 但是不要让语言阻止你发布一个好的链接。 =)
编辑:我并不是说我不理解数学 - 更多的是我不知道我需要知道什么才能理解所涉及的系统,并且不要我真的知道如何找到能以可理解的方式教会我的资源。
答案 0 :(得分:19)
这是我几年前收集的一些资源。值得注意的是Verlet集成。 我还包括我当时发现的一些开源和商业物理引擎的链接。这里有关于此主题的stackoverflow文章:2d game physics?
物理方法
<强>图书强>
物理引擎
答案 1 :(得分:7)
(来源:oreilly.com)
答案 2 :(得分:6)
根据经验,实施2D物理引擎非常困难。我将详细介绍我在创建引擎时采取的几个步骤。
碰撞检测。即使您没有处理3D世界或网络模拟,碰撞检测也可能是一个难题。对于2D物理,你肯定想使用Separating Axis Theorem。一旦你实施了SAT,你就完成了发动机动力学部分的一半。
运动学/动力学。克里斯·赫克尔写了一篇优秀的online resource,它逐步引导我完成碰撞响应。
其他一切。一旦你完成了碰撞检测/响应,就可以在引擎中实现你想要的其他一切。这可能包括摩擦力,接触力,关节以及您能想到的任何其他内容。
玩得开心!创建自己的物理模拟是一种非常有益的体验。
答案 3 :(得分:3)
这是一个很棒的教程,演示了使用闪存的2D物理概念,并不是特定于闪存。 http://www.rodedev.com/tutorials/gamephysics/game_physics.swf
答案 4 :(得分:3)
即使你想从下到上学习它,一个编码和记录良好的开源物理库包含的信息远远多于一本书。我如何处理情况x ...在文件中查找可能比纸质索引更快。
原始回复:
什么,没有提到Box2D?它是一个暴雪员工的开源项目,有一个很好的社区,而且很好。
在我对Box2D的简要体验中,将它与Torque Game Builder集成,我发现API干净利用,文档清晰,它支持我所期望的所有物理对象(特别是关节是一个要求),以及社区看起来很友好和活跃(2010年初左右)。
根据论坛海报判断,管理人员似乎也接受了来源捐款(没有携带许可证行李)。
这是基于岛屿的求解器看起来非常快,正如我对它的声誉所期望的那样,而不是我做过任何重大的性能测试。
答案 5 :(得分:2)
F#有一个名为计量单位的功能,可以为您进行维度分析,如果您弄错了则会提供错误。例如,如果你说:
let distance : float<meters> = gravity * 3.0<seconds>
这会产生编译错误,因为重力是&lt;米/秒^ 2&gt;而不是&lt;米&gt;。此外,由于F#只是.NET,您可以在类库中编写数学/物理代码,并从C#中引用它。
我建议您查看这些博客文章以获取更多信息:
答案 6 :(得分:1)
This is a great resource用于编写第一个引擎。它是3D的,但很容易转换为2D。我知道至少有一家大公司在他们的内部引擎上遵循本教程,我个人已经按照他自己的引擎的步骤。他解释了基于弹簧/脉冲的物理学中的所有基本物理概念,并向您展示了如何编写自己的整合器。
答案 7 :(得分:0)
The F#.NET Journal发表了两篇关于此的文章:
Real-time Finite Element Materials simulation(2008年6月15日)。
Rigid body dynamics(2010年1月15日)