我使用Visual C++ 2008 Express和Ogre3D sdk编写游戏。异步屏幕更新为游戏玩法逻辑,C++
我的核心游戏逻辑被设计为以100次/秒的速度运行。为了简单起见,我会说这是一种名为'gamelogic()'的方法。这不是基于时间的,这意味着如果我想将游戏时间提前1秒,我必须将“gamelogic()”调用100次。 'gamelogic()'与游戏的屏幕渲染相比是轻量级的。
Ogre有一个“侦听器”逻辑,告知您的代码何时绘制框架以及何时完成绘制框架。如果我在帧渲染之前调用“gamelogic()”,那么游戏将受到屏幕渲染速度的很大影响,屏幕渲染速度可能从5fps到120fps不等。
想到的最简单的解决方法是:计算自去年渲染的帧中的时间和呼叫“gamelogic()”下一帧之前很多次:100 * timeElapsedInSeconds
不过,我pressume了“正确“的方式是使用多线程;有一个单独的线程运行'gamelogic()'100次/秒。
问题是,我该如何做到这一点?当两个独立的线程发生冲突时,可以做些什么:gamelogic改变屏幕内容(3d对象坐标),同时Ogre同时呈现屏幕。
许多在此先感谢。
游戏从固定渲染率假设,以追踪框倍切换前一段时间 - 他们习惯了依赖知道处理器在8赫兹运行。当他们推出16Hz的机器时,他们包括一个'turbo按钮'将处理器从16Hz切换到8Hz,这样游戏仍然可以以正确的速度运行。有趣的事实。 – Kieveli 2009-05-28 14:21:46