Allegro 5在按下几个按键时检测到长按键

时间:2014-10-07 09:27:23

标签: allegro

在下面的代码块中,我试图为每次按键移动一个矩形,但只要按住一个键,矩形就会移动。

    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类型的事件。虽然这不会造成任何问题,但我想了解一点。

此外,上面的代码来自教程。它在那里工作得很好。

1 个答案:

答案 0 :(得分:0)

为了确保您的应用无法按每次Key_Down事件应用按键一次,定义一个初始化为false的布尔值。将Key_Down事件中的所有内容放在If语句中仅在布尔值== false时触发,并在其块中立即设置Boolean = true,然后是您希望事件每个事件只执行一次的事情。 然后,在相应的Key_Up事件集中 布尔值=假,你应该是金色的。

我还没有对此进行过测试,但它应该可以运行,它可以将您的应用程序与任何客户端计算机进行比较,无论他们的设备上是否有按键设置。