Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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++ SDL鼠标按钮不一致_C++_Button_Mouse_Mouseevent_Sdl - Fatal编程技术网

C++ SDL鼠标按钮不一致

C++ SDL鼠标按钮不一致,c++,button,mouse,mouseevent,sdl,C++,Button,Mouse,Mouseevent,Sdl,我在使用SDL轮询鼠标事件时遇到了一个奇怪的小问题 if(event.type == SDL_MOUSEBUTTONDOWN) { printf("click %d\n", event.button.button); } else if(event.type == SDL_MOUSEMOTION) { printf("move %d\n", event.button.button);

我在使用SDL轮询鼠标事件时遇到了一个奇怪的小问题

        if(event.type == SDL_MOUSEBUTTONDOWN) {
            printf("click %d\n", event.button.button);
        }
        else if(event.type == SDL_MOUSEMOTION) {
            printf("move %d\n", event.button.button);


        }
如果在移动鼠标时单击并按住鼠标右键,则会得到:

click 3 // = SDL_BUTTON_RIGHT
move 4  // != SDL_BUTTON_RIGHT !
move 4
...
i、 e.SDL_MOUSEBUTTONDOWN将鼠标右键的button.button设置为3,而SDL_MOUSEMOTION将其设置为4


有人知道为什么会发生这种情况吗?

您应该用于
SDL\u MOUSEMOTION
,而不是
event.button
。此外,
event.motion.state
是一个位掩码,您应该使用
event.motion.state&SDL_按钮(3)
event.BUTTON.BUTTON用于单击事件而不是用于运动,我不明白这段代码的目的是什么

我只是检查在运动过程中按下了哪个按钮(如果有)。我原以为event.button.button会保留此信息(对于鼠标左键-event.button.button在每个if子句中都是1,这很好)。这确实有效——尽管从一个简短的实验来看,
event.button=event.motion.state
。令人烦恼的是,在右键单击时,
event.button.button:=SDL_button_right(=3)
和在右键单击时,
event.button.button:=SDL_button(SDL_button_right)(=4…
,所以它不像我希望的那样干净。(有点恼人,它并不总是一个或另一个…这是因为,通过运动,你可以有多个鼠标按钮(这是一个或遮罩的状态)。对于按钮向下或向上事件,无法有多个按钮,因此它只返回按钮的“索引”,而不是掩码。我不知道当时的情况,但现在掩码有自己的常量。
SDL\u button\u RMASK=SDL\u button(SDL\u button\u RIGHT)