我正在使用allegro 5进行我的第一场比赛,这是一场蛇比赛。为了移动蛇游戏,我想使用我制作的方格,所以蛇会定期移动。
如何使用计时器在一定时间内发生事件?
例如,我希望我的蛇在方向设置中每秒移动一次,我知道如何控制他,但我不知道如何创建一个以某个间隔发生的事件。我正在使用Codeblocks IDE和Windows XP SP3
答案 0 :(得分: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答案中太过分了。