Отпущена кнопка мыши Allegro

Я хочу создать программу 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

Решение

Вы никогда не проверяете новое событие внутри 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();

}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]