SDL2 相对鼠标模式报告鼠标未移动时的运动
Posted
技术标签:
【中文标题】SDL2 相对鼠标模式报告鼠标未移动时的运动【英文标题】:SDL2 relative mouse mode reporting motion when mouse has not been moved 【发布时间】:2014-11-02 23:26:27 【问题描述】:我是 SDL2 的新手,请原谅我的无知,但是在 SDL2.0.3 中使用相对鼠标模式时,我遇到了奇怪的结果。当我执行SDL_SetRelativeMouseMode(SDL_bool::SDL_true)
时,光标按预期隐藏。在事件循环中,我检查windowEvent.type == SDL_MOUSEMOTION
,然后使用windowEvent.motion.xrel/yrel
xrel
和yrel
报告从-4 到4 的值,当鼠标甚至没有移动时!此外,实际移动我的鼠标似乎与报告的xrel
和yrel
无关。
我应该采取不同的做法吗?
【问题讨论】:
请展示一个重现该行为的最小示例。 您是否检查了SDL_SetRelativeMouseMode
的返回值以确保它受支持。如果不支持相对鼠标模式,它将返回 -1。尽管这听起来很愚蠢,但您是否测试过其他鼠标? 8 像素的散布可能是鼠标输入有缺陷的结果。
我想我开始明白问题到底是什么了——而且它似乎与鼠标有关。当我使用触控板在笔记本电脑上运行程序时,问题似乎消失了。但是,当我使用我一直在测试的鼠标时,在移动鼠标和让它出现在运动事件中之间存在巨大的延迟。此外,一旦它们出现,程序就会非常缓慢地执行动作。任何想法为什么会这样?我的着色器非常小,所以我不认为这是 GPU 过载问题。
您是否有可能每帧只处理一个事件,然后使用 vsync 或以其他方式限制帧速率?这可能会导致积压;你想在循环中执行 SDL_PollEvent 直到它为每一帧返回 false。
【参考方案1】:
我的电脑也有同样的问题,但使用 Uint32 SDL_GetRelativeMouseState(int* x,int* y)
可以正常工作。
【讨论】:
我在 SDL 2.0.12 上遇到了同样的问题,并确认SDL_GetRelativeMouseState()
使用 motion.xrel
和 motion.yrel
解决了事件 SDL_MOUSEMOTION
的“噪音”
以上是关于SDL2 相对鼠标模式报告鼠标未移动时的运动的主要内容,如果未能解决你的问题,请参考以下文章