4

allegro 5 で初めてのゲームを作成しています。これはスネーク ゲームです。ヘビのゲームを動かすために、私が作った正方形のグリッドを使いたいので、ヘビは一定の間隔で動きます。

タイマーを使用して特定の時間にイベントを発生させるにはどうすればよいですか?

たとえば、ヘビを方向セットで毎秒移動させたいのですが、ヘビを制御する方法は知っていますが、特定の間隔で発生するイベントを作成する方法がわかりません。Windows XP SP3 で Codeblocks IDE を使用しています

4

1 に答える 1

6

Allegro でゲームを作成するほとんどの人は、固定間隔のタイミング システムを使用していました。これは、1 秒あたり 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()、ヘビが向いている方向に 1 単位移動できます。これは、1 秒あたり 60 単位移動することを意味します。より細かくする必要がある場合は、分数単位を使用できます。

すべての機能を備えたイベント ループを備えているので、Allegro に付属しているいくつかのデモをご覧になることをお勧めします。単一のSO回答として含めるには多すぎます。

于 2012-09-03T17:23:59.073 に答える