Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 快板,输出鼠标点击_C++_Click_Mouse_Coordinates_Allegro - Fatal编程技术网

C++ 快板,输出鼠标点击

C++ 快板,输出鼠标点击,c++,click,mouse,coordinates,allegro,C++,Click,Mouse,Coordinates,Allegro,我想在图形窗口中打印出鼠标的坐标,当用户单击它时,应该会显示一条消息“clicked”。但问题是,当用户点击它时,我会收到大约5-10条消息,而不是1条消息。我知道这可能是因为我松开按钮的速度太快了。有没有办法只打印一次 #include <allegro.h> #include <iostream> int main(){ allegro_init(); install_keyboard(); install_mouse(); set

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

#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()
#包括
#包括
int main(){
第一快板();
安装键盘();
安装鼠标();
设置颜色和深度(32);
设置gfx模式(gfx自动检测窗口,640480,0,0);
位图*pic=加载位图(“mouse.bmp”,NULL);
位图*缓冲区=创建位图(640480);
int x=0,y=0;
而(!key[key\u ESC]){
blit(缓冲区,屏幕,0,0,0,缓冲区->w,缓冲区->h);
绘制精灵(缓冲区、图片、鼠标x、鼠标y);
blit(缓冲区,屏幕,0,0,0,缓冲区->w,缓冲区->h);
清除位图(缓冲区);
if(mouse_x!=x&&mouse_y!=y){

std::coutmouse_b
是否保持鼠标的状态?如果是这样,无论鼠标按下多长时间,它都可能每帧输出一次消息


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

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


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

使用allegro事件要容易得多

以下代码将完成您的任务

  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;
  }
if(ev.type==ALLEGRO\u事件\u鼠标\u按钮\u按下){

std::cout使用快板事件要容易得多

以下代码将完成您的任务

  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;
  }
if(ev.type==ALLEGRO\u事件\u鼠标\u按钮\u按下){
标准::cout