我希望读取 Cocoa 中键盘的状态(对于我在 SpriteKit 中构建的游戏)。
NSResponder 肯定会给我按键操作,但我没有收到修饰键按下的事件,如果我按住一个键,然后按另一个键,我将停止收到第一个键的 keyDown 事件。
在古代(在我的 MacPlus 上),我使用 GetKeys()
来获取每帧顶部的键盘状态。
我感到惊讶和困惑,这个仍然似乎有效:
KeyMap keys;
GetKeys(keys);
UInt32 keys3 = CFSwapIn32BigToHost(keys[3].bigEndianValue);
if (keys3 & 4)
{
NSLog(@"F1 is down");
}
但是,我确信一定存在本地化、不同键盘或其他问题(使用 30 年前的工具箱调用让我犹豫)。
有与此功能等效的现代版本吗?
最佳答案
有几种方法可以做到这一点,主要围绕 NSEvent
API。
- 您可以向
NSApplication
实例询问currentEvent
。这将为您提供一个NSEvent
,您可以检查其characters
、charactersIgnoringModifiers
、modifierFlags
等。 - 如果您只对修饰键感兴趣,则只需请求
+[NSEvent modifierFlags]
即可返回当前按下的修饰键的位掩码。 - 您可以安装事件监视器(全局或本地),以便在按键和/或修饰键发生更改时发出通知。
最后一种方法可能是最好的方法,因为它不需要轮询。
关于macos - Cocoa 中 GetKeys() 的现代等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214899/