gpt4 book ai didi

c++ - 释放 Allegro 鼠标按钮

转载 作者:行者123 更新时间:2023-11-28 07:33:14 25 4
gpt4 key购买 nike

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

        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();

}

最佳答案

您永远不会在 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();

}

关于c++ - 释放 Allegro 鼠标按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17251033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com