4

我正在制作我在 allegro 5 中的第一款游戏,这是一款蛇类游戏。为了移动蛇游戏,我想使用我制作的方形网格,所以蛇会定期移动。

如何使用计时器使事件在特定时间发生?

例如,我希望我的蛇每秒按设定的方向移动,我知道如何控制它,但我不知道如何创建一个以特定间隔发生的事件。我在 Windows XP SP3 中使用 Codeblocks IDE

4

1 回答 1

6

大多数使用 Allegro 创建游戏的人都使用固定间隔计时系统。这意味着每秒 X 次(通常是 60 或 100 次),您处理输入并运行一个逻辑循环。然后,如果您有剩余时间,您可以绘制一帧图形。

要创建一个以 60 FPS 滴答作响的计时器并将其注册到事件队列中:

ALLEGRO_TIMER *timer = al_create_timer(1 / 60.0);
ALLEGRO_EVENT_QUEUE *queue = al_create_event_queue();

al_register_event_source(queue, al_get_timer_event_source(timer));

现在在你的主事件循环中的某个地方:

al_start_timer(timer);
while (playingGame)
{
  bool draw_gfx = false;

  do
  {
    ALLEGRO_EVENT event;
    al_wait_for_event(queue, &event);

    if (event.type == ALLEGRO_EVENT_TIMER)
    {
      do_logic();
      draw_gfx = true;
    }
    else if (event.type == ... )
    {
      // process keyboard input, mouse input, whatever
      // this could change the direction the snake is facing
    }
  }
  while (!al_is_event_queue_empty(queue));

  if (draw_gfx)
  {
    do_gfx();
    draw_gfx = false;
  }
}

所以现在在 中do_logic(),您可以将蛇朝它所面对的方向移动一个单位。这意味着它将每秒移动 60 个单位。如果需要更多粒度,可以使用小数单位。

您可能想看看 Allegro 附带的一些演示,因为它们具有功能齐全的事件循环。作为一个单一的 SO 答案包含的内容太多了。

于 2012-09-03T17:23:59.073 回答