处理GKStates中的按键

时间:2017-06-20 16:05:24

标签: objective-c macos notifications sprite-kit gameplay-kit

注意:这是针对使用Objective C的SpriteKit。

我的游戏中有一个名为GameScene的场景,我使用GKStateMachine处理各种状态PlayPauseReadyToPlay 。我知道你可以使用keyDown:的{​​{1}}方法处理所有按键操作,但是对于所有不同的条件和组合键,它会很快变得非常混乱。

问题:有没有办法处理各个州级别的按键?

我读过article,说NSNotificationCenter是一个可怕的选择。我对这些东西知之甚少,无法做出明智的决定。

1 个答案:

答案 0 :(得分:0)

答案:您可以将按键处理重定向到您的状态,但这不是正确的方法。您应该确定按下了哪个键(或组合键),并将状态机切换到相应的状态。

实际上,检测女巫按键是否被按下非常简单。您需要NSEvent-modifierFlagskeyCode这两个属性。 这是将一些组合键打印到控制台的示例:

override func keyDown(with event: NSEvent) {

    let modifierKeys = event.modifierFlags.intersection(NSEvent.ModifierFlags.deviceIndependentFlagsMask)

        switch event.keyCode {
        case 0x31: print("spacebar")
        case 0x33: print("delete")
        case 0x1D: modifierKeys == NSEvent.ModifierFlags.command ? print("CMD + 0") : print("0")
        default: print("any other key")
        }
}

有关可用键码的更多信息,例如,您可以在这里找到:Where can I find a list of Mac virtual key codes?