【问题标题】:Allegro, outputting mouse clickAllegro,输出鼠标点击
【发布时间】:2013-01-05 15:46:55
【问题描述】:

我想在图形窗口中打印出我的鼠标坐标,当用户点击它时,应该会出现一条消息“点击”。但问题是当用户点击它时,我收到的不是 1 条消息,而是 5-10 条消息。我知道这可能是因为我释放按钮的速度有多快。有没有办法只打印一次?

#include <allegro.h>
#include <iostream>

int main(){

    allegro_init();
    install_keyboard();
    install_mouse();
    set_color_depth(32);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

    BITMAP *pic = load_bitmap("mouse.bmp",NULL);
    BITMAP *buffer = create_bitmap(640,480);

    int x = 0, y = 0;

    while(!key[KEY_ESC]){
        blit(buffer, screen, 0,0,0,0, buffer->w,buffer->h);

        draw_sprite(buffer, pic, mouse_x, mouse_y);
        blit(buffer, screen, 0,0,0,0, buffer->w, buffer->h);
        clear_bitmap(buffer);

        if(mouse_x!=x && mouse_y!=y){
            std::cout<<mouse_x<<":"<<mouse_y<<std::endl;
        }
        if(mouse_b&1){
            std::cout<<std::endl<<">>CLICKED<<"<<std::endl;
        }

        x=mouse_x, y=mouse_y;
    }

    destroy_bitmap(pic);
    destroy_bitmap(buffer);
    return 0;
}
END_OF_MAIN()

【问题讨论】:

    标签: c++ click mouse coordinates allegro


    【解决方案1】:

    mouse_b 是否保持鼠标状态?如果是这样,它可能会在每帧输出一次消息,无论鼠标按下多长时间。

    类似于您处理x,y 的方式,存储按钮的先前状态并仅在状态更改时发送消息,这应该只给您一条消息。

    【讨论】:

      【解决方案2】:

      使用 allegro 事件要容易得多。 Here is how allegro wiki explains events

      以下代码将完成您的任务。

        if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) {
            std::cout<<std::endl<<">>CLICKED<<"<<std::endl;    
        }
        else if(ev.type == ALLEGRO_EVENT_MOUSE_AXES ||
                ev.type == ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY) { 
              std::cout<<mouse_x<<":"<<mouse_y<<std::endl;
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 2017-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多