Objective c 在美国处理按键
注:这适用于使用Objective C的SpriteKit 我在游戏中有一个名为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是一个可怕的选择。我对这些东西了解不够,无法做出明智的决定。回答:你可以将按键过程重定向到你
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开发人员以某种特定的方式处理这些问题。