macOS关键事件缓慢重复

时间:2018-07-06 14:18:32

标签: macos keyboard nsevent macos-high-sierra

我正在尝试在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,这是在我的系统偏好设置中设置的。这意味着它正在跳过帧。但是,在游戏中,我不希望此设置影响运动。那么,如何才能检测到按键保持时间 没有被按键重复间隔保持住?

1 个答案:

答案 0 :(得分:1)

您应该忽略按键重复事件(isARepeat为true)。取而代之的是,当您收到按键事件时,请启动一个计时器,该计时器将在您希望提高游戏状态的任何时候触发。在该计时器的触发代码中推进游戏状态。当您收到按键事件时,请停止计时器。