如何在继续更新和绘制游戏项目时检查键盘输入 我用Allegro和C++开发了一个基本的游戏。我发现,接受键盘输入的常见答案是线条 al_wait_for_event(event_queue, &ev);

如何在继续更新和绘制游戏项目时检查键盘输入 我用Allegro和C++开发了一个基本的游戏。我发现,接受键盘输入的常见答案是线条 al_wait_for_event(event_queue, &ev);,c++,input,allegro5,C++,Input,Allegro5,但是,我不喜欢的是,它会导致程序等待输入。如果流星的位置需要不断更新,那么我不想让我的键盘听到它停止移动 根据我使用XNA的经验,我只需更新每个滴答声的键盘外观,然后询问是否按下了某个键。我可以使用什么方法继续更新和绘制游戏,同时仍然检查输入,与XNA处理类似?Allegro's的功能就是:它返回调用时键盘的当前状态。而不是al_wait_for_event,您应该在循环中使用al_get_next_event,直到它返回false。它立即返回,并且在没有更多事件时返回false。(另请查看al

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


根据我使用XNA的经验,我只需更新每个滴答声的键盘外观,然后询问是否按下了某个键。我可以使用什么方法继续更新和绘制游戏,同时仍然检查输入,与XNA处理类似?

Allegro's的功能就是:它返回调用时键盘的当前状态。

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


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

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

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秒收到一个计时器滴答声,您可以相应地做出反应并更新逻辑框架