我想制作一个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();
}
答案 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();
}