C++ SDL鼠标按钮不一致
我在使用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);
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)