我的问题是关于 opengl 中的游戏循环设计。
我相信可以通过 3 个主要步骤来消除游戏循环
- 接受输入 - 它可能来自用户点击屏幕或系统警报,或其他任何内容。
- 做逻辑
- 更新视图
为了简单起见,让我们只关注第 2 步和第 3 步。
我认为以并行顺序运行它们或将它们混合到一个步骤中是错误的。我给你一个例子。
lats说你在做一个战争游戏,你需要在屏幕上画100个战斗的士兵,逻辑是更新他们的位置,更新背景区域,然后你需要绘制结果。在更新另一名士兵的位置之前,您不能开始绘制一名士兵。
所以根据这个简单的步骤,很明显第 2 步和第 3 步需要以某种方式同步,并且第 2 步必须在第 3 步之前完成。
现在告诉我如何在多个线程和多个进程上运行游戏循环?opnegl 是否使用多核?如何?
编辑:使用多线程的一种方法是预先计算游戏逻辑,或者换句话说,使用向量。但是向量有两个很大的缺点,使得它们几乎不被推荐使用。
- 有时你不想改变你的向量,所以你做了很多计算,你不会使用它们
- 在大多数情况下,您试图达到 60+ FPS,这意味着游戏循环需要 16 毫秒,切换线程需要某种同步,任何同步都对性能不利,据我所见,即使是简单的 Handler.post()在 android 中(只是将任务添加到队列以在其他线程上运行)可能需要 3 毫秒(帧速率时间的 18%),所以除非你的计算需要更长的时间,否则不要这样做!现在我没有发现任何需要花费这么多时间的东西。