1

我正在使用 Allegro 和 C++ 开发一个基本游戏。我发现接受键盘输入的常见答案是行

al_wait_for_event(event_queue, &ev);

但是,我不喜欢的是它会导致您的程序等待输入。如果流星的位置需要不断更新,那么我不希望我的键盘监听停止它的运动。

根据我使用 XNA 的经验,我会简单地更新每个刻度的键盘外观,并询问是否按下了某个键。我可以使用什么方法来继续更新和绘制我的游戏,同时仍然检查类似于 XNA 处理它的输入?

4

3 回答 3

1

大多数人设置了一个由计时器控制的事件循环:

ALLEGRO_TIMER *timer = al_create_timer(1 / 60.0);
al_register_event_source(event_queue, al_get_timer_event_source(timer));
// register keyboard, other sources

现在,当您等待一个事件时,您将每 1/60 秒得到一个计时器滴答声,您可以对它做出相应的反应并更新一个逻辑框架。

于 2013-06-08T14:02:16.473 回答
1

而不是al_wait_for_event,您应该al_get_next_event在循环中使用,直到它返回 false。它立即返回,并在没有更多事件时返回 false。(另请查看al_is_event_queue_emptyand al_peek_next_event,您可能会发现它很有用。)

一旦你用完了事件,更新你的游戏逻辑,绘制框架,然后重新开始。(这正式称为“游戏循环”。)

于 2013-06-08T07:33:29.603 回答
0

Allegro 就是al_get_keyboard_state这样做的:它返回调用时键盘的当前状态。

于 2013-06-08T07:02:42.527 回答