SDL_FINGERDOWN在MultiTouch,OSX上给出了错误的光标位置

时间:2016-05-24 13:08:00

标签: c++ macos sdl sdl-2

设备:Macbook,OS X,多点触控,SDL2。

float posX = event.tfinger.x; 
float posY = event.tfinger.y; 
if ( event.type == SDL_FINGERDOWN ) std::cout << "posX = " << posX << ", posY = " <<  posY << "\n"; 

它返回我的多点触控设备的坐标。如果我在左上角点击我的多点触控,它会返回类似于0.1x0.1的坐标。好的,对。但是如何在OS X中获取光标位置的坐标?

我只能获得多点触控设备的坐标,但并不意味着它是屏幕上光标的坐标。我的意思是......我可以在左上角点击我的多点触控,但此时我的光标将位于屏幕的右下角。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望同时获得触摸设备的位置以及屏幕上光标的位置?

我建议使用SDL_MOUSEMOTION事件:

while (SDL_PollEvent(&e))
{
   switch(e->type) {
   case SDL_MOUSEMOTION:
       mouseX = e.button.x;
       mouseY = e.button.y;
       break;
   }
}

其中“mouseX”和“mouseY”变量将是SDL_Window 中屏幕上光标的坐标。

如果您想要全局鼠标坐标,可以使用SDL_GetGlobalMouseState:

int mouseX;
int mouseY;
SDL_GetGlobalMouseState(&mouseX, &mouseY);

它将为您提供全局(相对于桌面)坐标。

目前SDL_GetMouseState存在一个错误,如果您使用SDL_SetWindowFullscreen并将其设置为无边框全屏(SDL_WINDOW_FULLSCREEN_DESKTOP),则会得到错误的坐标,这就是我建议使用SDL_MOUSEMOTION事件的原因。 可以在任何其他实例中使用(据我所知)。