月球着陆游戏需要哪些数学知识?

12

我想制作一个用来学习 cocos2d 的游戏,月球着陆器 是我脑海中首先想到的练习项目。如有需要的物理计算指针/源代码/教程,不胜感激。谢谢!


我真的希望答案能更关注 “cocos2d” 游戏引擎和“月球着陆器”这款在许多70后中广为人知的实际游戏,而不仅仅是提供一些通用的物理公式链接。谢谢! - ohho
3
你的问题标题和正文都表明你想要有关物理方面的指导。如果这不是你想要的,请更新问题以更具体地说明。 - NotMe
6个回答

9
您需要以下内容:
  1. 二维牛顿运动定律。
  2. 能够更改重力效应。 9.8米/秒^2是地球上正确的加速度,但您应该能够将其更改为火星、月球、木星等适当的值。
  3. 能够开启和关闭推进器以抵消重力效应。如果您不这样做,游戏就不太有趣,因为每个人都会坠毁。
  4. 将推进器燃烧时间与燃料消耗联系起来的方法。 如果您不能管理好燃料,您就会坠毁。
  5. 初始条件(例如,距离表面的高度、初始速度、初始燃料等)

您将从初始条件开始,并循环多个时间步骤。在每个步骤结束时,您将检查位置和速度。如果y轴位置在表面以上为零或负数,则表示已着陆。如果速度大于关键y值,则会坠毁;小于关键值则表示安全软着陆。

您将通过数值方法解决牛顿运动方程。在您的情况下,它是四个耦合的一阶常微分方程:x和y方向速度的变化率以及x和y方向位置的变化率。如果您安装了推进器,您将添加另一个用于燃料质量守恒的方程。

如果您假设没有x分量,则可以消除两个方程:月球着陆器垂直于表面移动,推进器力只在垂直方向上具有非零分量。如果是这样,您就只剩下三个方程。

您将进行时间步进,因此最好阅读集成技术,例如显式欧拉或隐式5阶龙格-库塔方法。

这是一个具有挑战性的问题 - 不是简单的。祝你好运。


月球上的重力为1.622m/s^2。 - Code Whisperer

6
你需要为一款月球着陆游戏翻译数学相关的内容,其实很简单。你只需要了解牛顿运动定律,并阅读基础物理教材的第一章即可。系统中只有两个力输入 - 重力和引擎推力。只需计算运动的垂直和水平分量,就可以相应地为宇宙飞船制作动画。请注意,不要删除HTML标记。

4

3
这个方程式中没有能够抵消重力的推进器能力。这就是标准解决方案的问题:没有上下文,没有解释,无法确定其是否适用。 - duffymo
实际上,这就是为什么我链接了Trajectory页面并粘贴了该函数的原因。您可以使用该函数以任意角度(theta)点火推进器。数学应该非常出色。我错了吗? - David Titarenco
没时间看链接,不知道theta是推进器角度还是下降的初始角度。没有看到任何时间步进能力或开关推进器的功能。我认为需要更多数值方法 - 集成多个耦合ODE。请参见以下内容。 - duffymo

1

如果你的游戏是2D的,你不需要太多数学知识,只需要物理学,特别是基本的牛顿运动。可能是大学入门或者高中晚期的数学水平。这里面的数学包括一些小学代数和高中早期的微积分。

如果你看上下运动,那么你的飞船实际上是一个受到重力作用的物体(常数取决于你的“月球”),并且被其引擎所产生的力所抵消。你可以利用这个来确定加速度,并从中计算出速度。使用速度,你可以进行碰撞后的处理。左右运动更加简单,因为如果你的月球没有大气层,你只需施加一个恒定的力。

如果你想要更真实的效果,你可以根据距离地表的远近修改重力常数,并添加大气摩擦力(尽管它实际上不会是我们的月球)。

如果你的游戏是3D的,并且你的飞船除了底部推进器之外还有侧推进器,那么你不仅在位置上会有运动,还会有旋转。这涉及刚体物理学。据我所知,这需要大学水平的微积分。


7
但是你需要数学才能学物理,我认为牛顿会同意我的观点。 :) - Robusto

1
这可能有些过头,但我建议看一下数值计算——阅读普通微分方程的章节。你甚至不需要学习整个章节,只需要看前几节就可以了。

0
在二维空间中,每个时间刻度你需要将飞船的旋转推力加到其旋转速度上,将其旋转速度加到其当前航向上,通过将其航向的正弦和余弦乘以主推进器输出计算出一个推力向量,将该向量和重力向量(某一大小的垂直向下的向量)加到其当前速度上,并将其当前速度加到其位置上。如果计时器滴答声足够小,那么除了检查飞行器是否接触地面之外,你几乎不需要做其他事情。尝试调整推力和重力值的大小,直到你有一个可玩的游戏。

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