Allegro鼠标按钮发布

时间:2013-06-22 13:02:45

标签: c++ mouseevent allegro5

我想制作一个Allegro 5程序,当按下鼠标按钮时,光标必须改变它的外观。据我所知,这句话events.type!=ALLEGRO_EVENT_MOUSE_BUTTON_UP永远不会变错。但我无法理解为什么因为释放按钮后循环不会停止。你能告诉我我的错误在哪里以及是否有更好的替代方式?

        while(loop){
        al_clear_to_color(al_map_rgb(0,0,0));
        ALLEGRO_EVENT events;
        al_wait_for_event(event_queue, &events);
        if(events.type == ALLEGRO_EVENT_DISPLAY_CLOSE){
            loop=false;
        }
        if(events.type == ALLEGRO_EVENT_MOUSE_AXES ){
            x=events.mouse.x;
            y=events.mouse.y;
            buffer = released;
        }
        if( events.type==ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
            while (events.type!=ALLEGRO_EVENT_MOUSE_BUTTON_UP){
                x=events.mouse.x;
                y=events.mouse.y;
                al_draw_bitmap(pressed, x , y , NULL );
                al_flip_display();
                al_clear_to_color(al_map_rgb( 0 , 0 , 0));
            }

        al_draw_bitmap(released, x , y , NULL );
        al_flip_display();

    }

1 个答案:

答案 0 :(得分:1)

你永远不会在while (events.type!=ALLEGRO_EVENT_MOUSE_BUTTON_UP)循环中检查新事件,并且events.type的值不能改变。

您的程序已在循环中运行(while(loop){),无需再创建另一个程序。您应该创建一个取决于ALLEGRO_EVENT_MOUSE_BUTTON_UP状态的新变量,并更改鼠标的位置等...

类似的东西:(伪代码!)

    while(loop){
    al_clear_to_color(al_map_rgb(0,0,0));
    ALLEGRO_EVENT events;

    _Bool change = false ;

    al_wait_for_event(event_queue, &events);
    if(events.type == ALLEGRO_EVENT_DISPLAY_CLOSE){
        loop=false;
    }
    if(events.type == ALLEGRO_EVENT_MOUSE_AXES ){
        x=events.mouse.x;
        y=events.mouse.y;
        buffer = released;
    }
    if( events.type==ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)
        change = true ;
     if( events.type==ALLEGRO_EVENT_MOUSE_BUTTON_UP)
        change = false ;


    if( change )
        al_draw_bitmap(pressed, x , y , NULL );
    else
        al_draw_bitmap(released, x , y , NULL );

    al_clear_to_color(al_map_rgb( 0 , 0 , 0));
    al_flip_display();

}