注意:这是针对使用Objective C的SpriteKit。
我的游戏中有一个名为GameScene
的场景,我使用GKStateMachine
处理各种状态Play
,Pause
和ReadyToPlay
。我知道你可以使用keyDown:
的{{1}}方法处理所有按键操作,但是对于所有不同的条件和组合键,它会很快变得非常混乱。
问题:有没有办法处理各个州级别的按键?
我读过article,说NSNotificationCenter是一个可怕的选择。我对这些东西知之甚少,无法做出明智的决定。
答案 0 :(得分:0)
答案:您可以将按键处理重定向到您的状态,但这不是正确的方法。您应该确定按下了哪个键(或组合键),并将状态机切换到相应的状态。
实际上,检测女巫按键是否被按下非常简单。您需要NSEvent
-modifierFlags
和keyCode
这两个属性。
这是将一些组合键打印到控制台的示例:
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?