0
在下面的代码块中,我试图为每次按键移动一次矩形,但矩形移动只要按住一个键。Allegro 5检测长键按几次按键
ALLEGRO_EVENT ev;
while(!done)
{
al_wait_for_event(event_queue, &ev);
if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
{
switch(ev.keyboard.keycode)
{
case ALLEGRO_KEY_UP:
pos_y -= 10;
break;
case ALLEGRO_KEY_DOWN:
pos_y += 10;
break;
case ALLEGRO_KEY_RIGHT:
pos_x += 10;
break;
case ALLEGRO_KEY_LEFT:
pos_x -= 10;
break;
}
}
else if(ev.type == ALLEGRO_EVENT_KEY_UP)
{
if(ev.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
done = true;
}
al_draw_filled_rectangle(pos_x, pos_y, pos_x + 30, pos_y + 30, al_map_rgb(255,0,255));
al_flip_display();
al_clear_to_color(al_map_rgb(0,0,0));
}
而且我注意到,al_wait_for_event是不是在按住一个关键的情况下等待新的事件,但实际上是在制造ALLEGRO_EVENT_KEY_CHAR
类型的事件。虽然这不应该造成任何问题,但我想更多地了解它。
此外,上述代码取自教程。它在那里工作得很好。
本教程是否碰巧调用了'void set_keyboard_rate(int delay,int repeat);'将延迟和重复设置为零?参考:[键盘例程](http://alleg.sourceforge.net/stabledocs/en/alleg006.html)。 – 2014-10-07 10:12:03
不,这里是整个代码的网址 - http://fixbyproximity.com/public_files/TextInput1.cpp – SaiSrini 2014-10-07 11:13:44
我相信'set_keyboard_rate'不在5.0/5.1 API中 - 这取决于用户设置重复率通过他们的系统。 – rcorre 2014-10-07 11:13:55