正如标题所说,我正在尝试在SDL2应用程序中完成叠加菜单。 我有一个窗口,如果鼠标开始移动,我想显示一个叠加菜单,并在鼠标移动时显示它。如果鼠标停止移动,则计时器应以特定超时开始,并应在超时过后隐藏菜单。
我尝试使用像SDL_MOUSEMOTION这样的鼠标事件,但这不起作用。我宁愿需要类似“鼠标运动停止”的事件,然后我会启动计时器。
然后我认为我可以将SDL_MOUSEMOTION与SDL_GetRelativeMouseState()结合起来并比较鼠标位置增量并在增量为0时启动计时器。但这种看起来太复杂了。后者是走的路,还是有更简单的方法?
答案 0 :(得分:1)
有几种方法可以解决这个问题:
SDL没有发送鼠标停止运动'事件,但在概念上,鼠标运动停止了#39;事件是您尚未收到鼠标移动事件的框架。如果您有帧更新循环,请跟踪您是否在前一帧中收到了鼠标移动事件并相应地更新了菜单计时器。
每次收到SDL_MouseMotion
事件时,只需重置菜单的计时器即可。它不优雅,但它应该工作。收到第一个动作事件后立即运行菜单计时器,每次收到后续动作时重置计时器,直到它到期并隐藏菜单。