0

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

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

4

2 回答 2

1

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

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

   render_game();
}

到目前为止似乎工作正常......我猜在 Allegro 中可能会有类似的事情。事件驱动的游戏很棘手,因为您需要不断更新游戏。

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

于 2011-10-21T11:05:08.683 回答
0

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

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

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

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

这里有一些链接
书籍摘录游戏引擎
游戏循环在 IOS

于 2011-10-21T13:01:13.430 回答