游戏主循环逻辑

时间:2011-10-21 10:37:38

标签: c++ allegro5 game-loop

我正在使用allegro 5在c ++中编写游戏.Allegro 5具有堆叠在事件队列中的事件(例如在1 / FSP时间之后点击鼠标或计时器)。所以我的问题是我的游戏主循环的逻辑应该如何,或者因为基于事件我可以在没有主循环的情况下实现它?

真正的游戏如何做到这一点?链接会很好。

2 个答案:

答案 0 :(得分:1)

我没有使用Allegro的经验,但是当使用SFML并使用OpenGL渲染游戏时,我自己将事件队列轮询为主循环的一部分。像下面的伪代码(但更抽象):

while(game_on)
{
   auto events = poll_occured_events();
   for_each(events, do_somewithng_with_event);

   render_game();
}

到目前为止似乎工作得很好......我猜想在Allegro中可能有类似的东西。事件驱动的游戏很棘手,因为你需要不断更新游戏。

你可以(可能)在另一个线程中拥有主循环,然后在事件线程和游戏线程之间进行同步......

答案 1 :(得分:0)

我对Allegro也没有任何经验,但逻辑也是一样的。

(所谓的)真实游戏也有游戏循环,但不同之处在于它们使用并行工作但在不同时间间隔内的线程。例如,物理计算,人工智能,游戏玩法,声音,渲染都有不同的线程......因为用户事件通常是在玩游戏事件之前收集的游戏事件(如Max建议的那样)并被消耗到下一帧(实际上有些人收集它)例如5帧)。

由于框架可能会变得太长,因此来自操作系统的所有事件都会被游戏收集,因此这些输入称为缓冲输入。还有另一种方法称为无缓冲输入,它不起作用离散,而是在游戏循环期间在它被查询的实例中测试它。

如果用户输入非常重要,并且您根本不想丢失任何输入,那么您可以使用缓冲否则无缓冲。但是,无缓冲可能会很棘手,尤其是在调试期间。

这里有一些链接
book excerpt game engine
Game Loops on IOS