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