【发布时间】:2017-03-17 11:21:17
【问题描述】:
我正在重写 keyPressEvent 以在 QGraphicsScene 中移动玩家。播放器有一个需要 1000 毫秒的动画(应该在继续之前完成)。
我的问题是,如果用户按住键,它会发送大量事件,实际上会导致明显的延迟。除了设置一些布尔值之外,还有什么方法可以暂时禁用事件监听?
进一步的问题;我有一个游戏循环,所有运动都应该以例如间隔发生。 1000 毫秒(想想所有玩家都在同一滴答声上移动的旧游戏 - 一切都保持同步)。除非用户在确切的时刻点击,否则他们将不得不等待下一个滴答声才能出现。所以这里的问题是我如何缓冲用户按下例如在滴答声前 200 毫秒,在滴答声发生的那一刻,它会执行最近的一次按下(上、下、左、右)。
或者我是不是搞错了?
【问题讨论】:
-
我在游戏开发方面没有任何经验,但对于第一个问题,设置布尔值似乎是最好的选择。至于第二个问题,您可以创建一个仅保存一个关键事件的对象,当您开始“移动”时,您只需在其中写入第一个关键事件并丢弃所有其他事件
标签: c++ qt keyboard-events game-loop