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

标签 objective-c swift macos sprite-kit keyboard

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

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

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

//some more code

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

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

注意#2:这个问题不是链接问题的重复,因为它只从接收“keyPressed”事件(作为方法调用的参数)的角度解决问题,而不是从在别处执行检查以查明当前是否正在按下某个键的角度来看。换句话说,它没有帮助我填写上面 if 语句中的条件。

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

最佳答案

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

关于objective-c - 如何检测是否在 OS X 上按下了某个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34391748/

相关文章:

ios - 辞去键盘后如何保持 subview ,用平移手势移动,在适当的位置?

objective-c - 如何为我的 OSX 应用程序添加 Root 权限?

ios - UIView 的子类没有 view 属性

iOS SDK - 图像 mask

ios - 如何比较两个ID

ios - 保存 UILabel 信息?

ios - iMessage 应用程序不断重新启动

macos - OSX Mavericks 升级后 Vagrant 同步文件夹不工作

node.js - 使用 tmux 时,未获取 nvm

iphone - respondsToSelector 总是失败