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 xrelyrel 报告从-4 到4 的值,当鼠标甚至没有移动时!此外,实际移动我的鼠标似乎与报告的xrelyrel 无关。

我应该采取不同的做法吗?

【问题讨论】:

请展示一个重现该行为的最小示例。 您是否检查了SDL_SetRelativeMouseMode 的返回值以确保它受支持。如果不支持相对鼠标模式,它将返回 -1。尽管这听起来很愚蠢,但您是否测试过其他鼠标? 8 像素的散布可能是鼠标输入有缺陷的结果。 我想我开始明白问题到底是什么了——而且它似乎与鼠标有关。当我使用触控板在笔记本电脑上运行程序时,问题似乎消失了。但是,当我使用我一直在测试的鼠标时,在移动鼠标和让它出现在运动事件中之间存在巨大的延迟。此外,一旦它们出现,程序就会非常缓慢地执行动作。任何想法为什么会这样?我的着色器非常小,所以我不认为这是 GPU 过载问题。 您是否有可能每帧只处理一个事件,然后使用 vsync 或以其他方式限制帧速率?这可能会导致积压;你想在循环中执行 SDL_PollEvent 直到它为每一帧返回 false。 【参考方案1】:

我的电脑也有同样的问题,但使用 Uint32 SDL_GetRelativeMouseState(int* x,int* y) 可以正常工作。

【讨论】:

我在 SDL 2.0.12 上遇到了同样的问题,并确认 SDL_GetRelativeMouseState() 使用 motion.xrelmotion.yrel 解决了事件 SDL_MOUSEMOTION 的“噪音”

以上是关于SDL2 相对鼠标模式报告鼠标未移动时的运动的主要内容,如果未能解决你的问题,请参考以下文章

2019 春第1次课程设计实验报告

SDL2 因 InputHandler 鼠标移动而崩溃

用于移动SDL2窗口的功能,而鼠标按下时会闪烁该窗口,并且移动速度不够快

Unity3D UGUI组件跟随鼠标运动

vim学习一

鼠标悬停时的 Blazor 运动?