真正的诀窍是高中水平的科学。你应该做的。如果您没有快速进行Google搜索,则会使您入门。为了说明您如何避免“新手”思维,请以登月器为例。
阅读完后,[change in position] = [velocity] * [time passed]
很明显需要跟踪这些变量:
float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.
接下来,您只需将速度应用于每一帧的位置:
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
现在我们想改变每帧的速度,以便增加重力。根据完全相同的来源[change in velocity] = [acceleration] * [time passed]
。因此,我们可以应用完全相同的原理:
const float gravity = 9.8f; // The gravity of the earth.
// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;
现在,您需要让玩家控制自己的飞船的方法。通过阅读更多有关基本物理的知识,您将了解到运动是力的结果-我找不到来源,但[change in acceleration] = ([force] / [mass]) * time
据我所知。因此,当玩家按下某个键时,您只需将fx
和fy
变量设置为某种值,并在更新期间应用等式。
最终,您需要考虑游戏中对象周围的物理现象,而不是试图使它们以您认为的方式运动,而是查找方程式。
未来的注意事项:请记住,这绝对不是进行物理学的最佳方法(这被称为Euler积分,并且可能在低帧频下导致某些奇怪的情况)-您需要研究其他的做事方法(该文章有不错的基础知识文章)。但是,现在就坚持使用Euler Integration,因为这意味着您正在尝试少学习一件事。
哪些游戏会教您如何正确地思考?
您将如何测试自己是否正确,以正确的心态做事?Sleep(10 milliseconds)
在游戏循环中插入一个,所有内容仍应移动并以与完整帧速率相同的方式做出反应。
最后,请远离3D(并避免使用四元数和矩阵),直到您具有使2D游戏正常工作的大量经验为止。我冒昧地说,相当多的游戏开发人员实际上并不知道四元数或矩阵的工作原理,而只是知道如何使用它们,以后再使用它们(或者永远不会,二维游戏很有趣,而且可能相当有趣)。成功)。您实际上不需要了解线性代数等等就可以在基本级别上做到这一点(但这确实有帮助,因此,如果可以的话,上一些夜校)。
最后的好处:我的美术老师经常告诉我的一件事是:“不要画出你想看到的东西,不要画出你看到的东西”。同样的事情在这里适用于“不要建模您认为发生的事情(object.position++
),建模发生的事情(`object.position + =速度*时间)”-至少要达到合理的极限(您不是在建模一个完美准确的系统,而是很好的模仿)。