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