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 为真)。相反,当您收到按键事件时,启动一个计时器,该计时器会按您希望推进游戏状态的频率触发。在该计时器的触发代码中推进游戏状态。当您收到按键事件时,停止计时器。