【问题标题】:SDL_GetMouseState doesn't work to get initial mouse positionSDL_GetMouseState 无法获取初始鼠标位置
【发布时间】:2013-07-19 17:28:22
【问题描述】:

有没有办法在 SDL 2.0 中获取鼠标的初始位置?
我尝试通过SDL_GetMouseState(&mouse_x,&mouse_y) 获取鼠标坐标,但是只有在使用函数SDL_PollEvent() 后才能得到预期的结果,而且如果鼠标没有移动,我也看不到(0,0) 以外的值自程序开始以来至少一次。虽然我没有检查 SDL_MOUSEMOTION 并将SDL_GetMouseState() 连接到它,但我只有在鼠标移动时才能获得鼠标坐标。那么有什么问题?或者SDL_GetMouseState() 适合这样做吗?
编辑:为什么,为什么没有任何答案?

【问题讨论】:

  • 您在哪个操作系统上使用 SDL2?

标签: sdl mouse-coordinates sdl-2


【解决方案1】:

尝试在 SDL_GetMouseState() 之前调用 SDL_PumpEvents()。

【讨论】:

  • 我已经试过了,但我没有得到我期望的结果。我又试了一次,没有变化。
  • @user2561614:所以你正在做类似SDL_Init(); SDL_CreateWindow(); SDL_PumpEvents(); SDL_GetMouseState()的事情?因为在我的 Win7 系统上,如果我的鼠标最初位于窗口内,它会给我一个合理的(非零)x/y。
  • 在 Kubuntu 18.04 上复制了相同的结果,x 和 y 为零。当光标在启动时超出 SDL 窗口时会发生这种情况。
【解决方案2】:

SDL 在SDL_PrivateSendMouseMotion 内部更新鼠标的位置,由同一文件中的各种鼠标相关函数调用。

这些函数在事件循环处理函数WIN_WindowProc中调用,以响应Windows调度的鼠标事件。

因此,如果您不移动鼠标,则不会调度任何事件,并且 SDL 不知道鼠标在哪里。解决方案是在请求位置之前等待鼠标事件,并在此事件之前找到解决方法。

【讨论】:

    【解决方案3】:

    我知道已经很晚了,但我只是想解决一下我找到的解决方案。 如果坐标为零,请调用 SDL_GetGlobalMouseState(&x, &y) 然后将 x 和 y 偏移 window.x 和 window.y 坐标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多