gpt4 book ai didi

macos - Mac OS X 游戏如何接收低级键盘输入事件?

转载 作者:行者123 更新时间:2023-12-03 16:01:23 26 4
gpt4 key购买 nike

游戏需要对键盘输入进行低级访问。在 Windows 上,有 DirectInput。但 Mac OS X 游戏开发人员使用什么技术呢?

显然,有足够多的 Mac 游戏可以正确地进行键盘输入,而没有常见解决方案的缺点:

解决方案#1:Use keyUp / keyDown events

-(void)keyUp:(NSEvent*)event;
-(void)keyDown:(NSEvent*)event;

Not Acceptable 缺点: keyDown 事件根据“按键重复率”和“按键重复延迟”的系统首选项设置进行重复。这会导致初始 keyDown 事件,然后暂停,然后开始以系统首选项设置定义的速率重复。该方案不能用于连续按键事件。

我想知道是否可以禁用按键重复行为?我想您可以读取第一个 keyDown 键,然后记住类中的“keyCode x 按下的键”状态,直到收到该键的 keyUp 事件,从而绕过重复延迟和重复率问题。

解决方案#2:Use Quarts Event Taps

参见Quartz Event Services Reference 。这似乎是足够低级的。

Not Acceptable 缺点:需要在通用访问 - 键盘下的系统偏好设置中启用辅助设备。虽然默认情况下此功能可能处于打开状态,但不能保证它在某些系统上可能会被关闭。

我还了解到 Quartz 事件点击需要应用程序以 root 身份运行,但没有找到对此的确认。

解决方案#3:Carbon Events / IOKit HID

Carbon Event Manager Reference被标记为遗留,不应该用于新的开发。

Not Acceptable 缺点:没有人知道在未来的 Mac OS 版本中将继续支持 Carbon 事件多久。

除了 Carbon 是一个遗留框架之外,这似乎仍然是最好的解决方案。但是使用 Carbon Events 还有其他缺点吗?

问题:

Mac OS X 游戏开发人员使用哪种技术来接收低级键盘输入事件?如果他们使用上述技术之一,他们如何解决我提到的缺点?

更新:

我最终转向使用常规 NSEvent 消息并将它们包装在 neat API for polling the keyboard states 中.

最佳答案

我在#3方面运气不错,但如果你想支持键盘以外的任何东西,它需要做很多繁重的工作。

不过,在我们深入探讨之前,先简单说一下,Carbon 和 IOKit HID 是两个独立的东西。碳可能会在某个时候消失。但 IOKit HID 将会继续存在,并在 10.5 中进行了一次漂亮的改版。

有关这些内容如何组合在一起的完整示例,请查看 https://github.com/OpenEmu/OpenEmu/blob/master/OpenEmu/OEHIDManager.m 。这只是拼图的一小部分,因为其中还有其他文件。

可以找到您想要执行的操作的文档 http://developer.apple.com/library/mac/#documentation/DeviceDrivers/Conceptual/HID/new_api_10_5/tn2187.html

再次强调,这不会很快消失,并且与 Carbon 和 Carbon Events 完全分开。

关于macos - Mac OS X 游戏如何接收低级键盘输入事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348886/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com