如何检测是否在 OS X 上按下了某个键?

Geo*_*rge 3 keyboard macos objective-c sprite-kit swift

我正在为 OSX 用 Spritekit 编写游戏。如何检查当前是否正在按下某个键?考虑这个例子:

//some code. this could be e.g. inside a game loop

if (/*is key 'w' pressed*/) {
    // move forward
}

//some more code
Run Code Online (Sandbox Code Playgroud)

Swift 和 Objective-C 解决方案都很有用。

注意:我对接收或处理事件不感兴趣,所以我想尽可能避免这种情况。我只需要检查当前是否按下了特定键。

注意#2:此问题不是链接问题的重复,因为它仅从接收“keyPressed”事件(作为方法调用的参数)的角度解决问题,而不是从在其他地方执行检查的角度解决问题找出当前是否正在按下某个键。换句话说,它不能帮助我填写上述 if 语句中的条件。

我想我最终可能不得不维护一个布尔数组,每个键码一个,并在收到 keyDown 和 keyUp 事件时更新其内容。但我希望有一个更优雅的解决方案,因为这似乎是非常微不足道的功能。

JWW*_*ker 5

如果轮询而不是接收通知更方便,您可以使用 Quartz 事件服务功能CGEventSourceKeyState