macOS 按键事件慢速重复
Posted
技术标签:
【中文标题】macOS 按键事件慢速重复【英文标题】:macOS Key Event Slow Repeat 【发布时间】:2018-12-15 04:22:35 【问题描述】:我正在尝试在 macOS 中创建一个小型 WASD 演示游戏。我使用NSEvent
来处理关键事件。为了检测按键,我正在搜索keyDown
事件。这是我所拥有的:
NSEvent.addLocalMonitorForEvents(matching: .keyDown)
(keyEvent) -> NSEvent? in
if self.keyDown(with: keyEvent)
return nil
else
return keyEvent
func keyDown(with event: NSEvent) -> Bool
userInt.keyDown(key: event.characters)
return true
所以在这里,我按住键(正如您在游戏中所期望的那样),并且我的动作非常缓慢。就像,当我按住它时,它非常笨拙。经过进一步检查,我发现密钥重复间隔为 0.1 秒,这是在我的系统偏好设置中设置的。这意味着它正在跳帧。但是,在游戏中,我不希望此设置影响运动。那么如何在不被按键重复间隔阻止的情况下检测到按键持有事件?
【问题讨论】:
【参考方案1】:您应该忽略按键重复事件(isARepeat
true)。相反,当您收到按键事件时,请启动一个计时器,该计时器会触发您想要提升游戏状态的频率。在该计时器的触发代码中推进游戏状态。当您收到按键事件时,停止计时器。
【讨论】:
我实际上已经想到了这种技术,但我认为会有一种更简单的方法,它不在 NSEvent 文档中。但如果这是唯一的方法,我会去的。谢谢。 不客气。当你这样做时,你可能应该根据事件的关键代码而不是字符来采取行动。例如,您想“向前移动”最上面一行字母中从左数第二个的键,不一定是产生“w”字符的键,它可能位于具有不同键盘布局的不同位置。无论键盘布局产生什么字母,该键都有keyCode
kVK_ANSI_W
。以上是关于macOS 按键事件慢速重复的主要内容,如果未能解决你的问题,请参考以下文章
在按键事件中使用jQuery在textarea中设置文本[重复]