我正在尝试在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.1s,这是我的系统首选项中设置的。这意味着它跳过了帧。但是,在游戏中,我不希望此设置影响移动。那么,如何在不被密钥重复间隔干扰的情况下检测密钥保持事件呢?
您应该忽略键重复事件(isARepeat
true(。相反,当你收到一个按键事件时,启动一个计时器,该计时器以你想要提前游戏状态的频率触发。在该计时器的触发代码中推进游戏状态。当您收到键控事件时,请停止计时器。