macOS 按键事件慢速重复
macOS Key Event Slow Repeat
我正在尝试在 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 秒,这是在我的系统首选项中设置的。这意味着它正在跳帧。但是,在游戏中,我不希望此设置影响移动。那么如何检测按键保持事件而不被按键重复间隔阻止?
您应该忽略按键重复事件(isARepeat
为真)。相反,当您收到按键事件时,启动一个计时器,该计时器会按您希望推进游戏状态的频率触发。在该计时器的触发代码中推进游戏状态。当您收到按键事件时,停止计时器。
我正在尝试在 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 秒,这是在我的系统首选项中设置的。这意味着它正在跳帧。但是,在游戏中,我不希望此设置影响移动。那么如何检测按键保持事件而不被按键重复间隔阻止?
您应该忽略按键重复事件(isARepeat
为真)。相反,当您收到按键事件时,启动一个计时器,该计时器会按您希望推进游戏状态的频率触发。在该计时器的触发代码中推进游戏状态。当您收到按键事件时,停止计时器。