我正在使用 Visual C++ 2008 Express 和 Ogre3D sdk 编写游戏。
我的核心游戏逻辑设计为每秒运行 100 次。为简单起见,我会说这是一个名为“gamelogic()”的方法。它不是基于时间的,这意味着如果我想“提前”游戏时间 1 秒,我必须调用 'gamelogic()' 100 次。与游戏的屏幕渲染相比,'gamelogic()' 是轻量级的。
Ogre 有一个“监听器”逻辑,当它要绘制一个框架以及它何时完成绘制一个框架时,它会通知你的代码。如果我只是在帧渲染之前调用'gamelogic()',那么游戏玩法将受到屏幕渲染速度的极大影响,屏幕渲染速度可能从 5 fps 到 120 fps 不等。
想到的简单解决方案是:计算自上次渲染帧以来经过的时间,并在下一帧之前多次调用“gamelogic()”:100 * timeElapsedInSeconds
但是,我认为“正确”的方法是使用多线程。有一个单独的线程运行 'gamelogic()' 100 次/秒。
问题是,我如何实现这一点以及当 2 个单独的线程之间存在冲突时可以做什么:gamelogic 更改屏幕内容(3d 对象坐标),而 Ogre 同时渲染屏幕。
提前谢谢了。