game-engine - 帮助游戏开发。渲染循环?

标签 game-engine game-loop

我正在开发一个简单的游戏,这是我的第一个游戏项目。

我发现的大多数示例都有一个渲染循环,其中所有的游戏逻辑也是如此,我只是不喜欢这样。
假设我有一个 X=0 的球,一个 X=10 的墙,在一台慢速机器中,第一个循环将球放置在 X=7 中,在第二个循环中,它将球放置在 X=14 中。只会让游戏崩溃!

这种“渲染循环”是制作游戏的正确方式吗?我应该编写代码在每一帧中检查这样的事情吗?例如,新帧 X=14,最后一帧 X=7,所以我应该检查是否有从 X=7 到 X=14 的任何内容??

我在想我应该为游戏逻辑和渲染循环设置一个单独的线程,我应该只是“拍摄”当前游戏逻辑的快照并显示出来,不是吗?

你们这些经验丰富的游戏开发者是如何解决这个问题的?

谢谢!

最佳答案

正如另一个答案所说,您看到的问题称为“隧道”这是“子弹穿过纸”的问题,子弹移动得很快,纸很薄,你怎么知道发生了碰撞?

如果你的世界边界很简单,这很容易。例如。在俄罗斯方 block 中,方 block 只允许左右移动,直到它们撞到侧面,并且很容易测试最底部的坐标是否撞到“地面”。这些测试很简单,因为您一次可以做一个轴,并且与侧面的碰撞意味着与坑底部的碰撞不同的东西。如果您有一个矩形房间,只需通过钳制其坐标来“停止”移动对象(如果其移动已将其置于房间之外)。 IE。如果房间宽度从 -3 到 +3,并且您的对象的 X 为 5,只需将其更改为 3 即可。

如果你想处理更复杂的世界,那就有点棘手了。您需要阅读“扫掠”几何碰撞。基本上,如果你有一个圆圈,你需要用一个胶囊来做碰撞测试,这个形状是通过从它的起点“扫过”圆圈到它的终点来形成的。它就像一个两端都有半圆的矩形。数学出奇地直截了当(恕我直言),但要正确理解并真正理解正在发生的事情可能会很棘手。不过还是值得的!

编辑:关于线程问题-无需使事情复杂化。一根线就好了。跳过更新帧也会变得困惑,并且非常先进,因为您实际上需要弄清楚“ future ”,然后对所有有趣的值进行插值直到那时。我自己并不称其为“渲染”循环,因为渲染循环只是该过程的一部分。

def GameLoop():
   while True:
      ReadInputs()
      FigureOutWhatStuffDoes()
      DrawItAll()

编辑 2:这似乎是一个有趣的讨论:http://www.gamedev.net/community/forums/topic.asp?topic_id=482397

关于game-engine - 帮助游戏开发。渲染循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784171/

相关文章:

java - 关闭并重新打开应用程序后,Android Canvas 游戏循环中断 onResume()

Java 游戏引擎

python - 用于建模纸牌游戏的现成 Javascript 库?

android - 哪个是创建 View 的原始线程?

c# - C# 中的简单游戏,仅包含 native 库

python - 为什么 Python 在 Pygame 中对 'event' 变量抛出 Unbound local 错误?

android - AndEngine是游戏引擎吗?

haskell - 如何在 Haskell 中最好地同步游戏引擎和网络服务器?

android - iOS + Android 2D 游戏引擎

android - 暂停线程 - HistoryRecord 的 Activity 暂停超时