2013-06-22 143 views
0

我想製作一個Allegro 5程序,在按下鼠標按鈕時光標必須改變它的外觀。據我所知,這個聲明events.type!=ALLEGRO_EVENT_MOUSE_BUTTON_UP永遠不會變成錯誤的。但我不明白爲什麼,因爲釋放按鈕後循環不停止。你能告訴我我的錯誤在哪裏,如果有更好的替代方法?Allegro鼠標按鈕發佈

 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

你從來沒有檢查是否有新的事件裏面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(); 

} 
+0

我已經嘗試了這個方法,但問題是,它只顯示按下的光標圖片一秒鐘,當我改變鼠標位置而不釋放按鈕時,它再次顯示釋放的圖片... – Sam379

+0

@ Sam379我的代碼不是解決方案,而是一個示例如何更正確地組織你的活動。在這種情況下,你應該使'change'變量'static'。 – 2013-06-22 14:03:44

+0

好的,非常感謝 – Sam379