【问题标题】:SDL_FINGERDOWN gives wrong cursor position on MultiTouch,OSXSDL_FINGERDOWN 在 MultiTouch、OSX 上给出错误的光标位置
【发布时间】:2016-09-21 17:26:47
【问题描述】:

设备: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 中获取光标位置的坐标呢?

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

【问题讨论】:

  • 看起来像是某种错误

标签: c++ macos sdl sdl-2


【解决方案1】:

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

我建议使用 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 事件。
可以在任何其他情况下使用(据我所知)。

【讨论】:

    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多