Objective c 在美国处理按键

Objective c 在美国处理按键,objective-c,macos,notifications,sprite-kit,gameplay-kit,Objective C,Macos,Notifications,Sprite Kit,Gameplay Kit,注:这适用于使用Objective C的SpriteKit 我在游戏中有一个名为GameScene的场景,我使用GKStateMachine来处理各种状态Play、Pause和ReadyToPlay。我知道你可以在游戏场景的下键:方法中处理所有按键,但在所有不同的条件和按键组合下,它会很快变得非常混乱 问题:是否有办法处理各个状态类中的按键操作? 我读过一篇文章,说NSNotificationCenter是一个可怕的选择。我对这些东西了解不够,无法做出明智的决定。回答:你可以将按键过程重定向到你

注:这适用于使用Objective C的SpriteKit

我在游戏中有一个名为
GameScene
的场景,我使用
GKStateMachine
来处理各种状态
Play
Pause
ReadyToPlay
。我知道你可以在
游戏场景
下键:
方法中处理所有按键,但在所有不同的条件和按键组合下,它会很快变得非常混乱

问题:是否有办法处理各个状态类中的按键操作?


我读过一篇文章,说NSNotificationCenter是一个可怕的选择。我对这些东西了解不够,无法做出明智的决定。

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

事实上,很容易检测到按下了巫婆键。您需要来自
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")
        }
}

有关可用密钥代码的更多信息,例如,您可以在此处找到:

我想您正在macOS中工作?您可能想添加该标记。我刚刚添加了标记。谢谢。没问题,也许知道OSX编码的人可以更好地帮助你,大多数的sprite工具包的人都是iOS开发者是的,我注意到了,不幸的是。这不是一个真正的SpriteKit问题,因为它可以在任何平台上完成,但我只是把SpriteKit放在一个例子中,以防SpriteKit开发人员以某种特定的方式处理这些问题。