osx – Mac OS X游戏如何接收低级别的键盘输入事件?

osx – Mac OS X游戏如何接收低级别的键盘输入事件?,第1张

概述游戏需要低级访问键盘输入。在Windows上有DirectInput。但Mac OS X游戏开发人员使用什么技术? 显然,有足够的Mac游戏可以正确地输入键盘输入,而没有常见解决方案的缺点: 解决方案#1:Use keyUp / keyDown events -(void)keyUp:(NSEvent*)event;-(void)keyDown:(NSEvent*)event; 不可接受的缺点: 游戏需要低级访问键盘输入。在windows上有Directinput。但Mac OS X游戏开发人员使用什么技术?

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

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

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

不可接受的缺点:根据“密钥重复率”和“密钥重复延迟”的系统偏好设置重复keyDown事件。这将导致初始的keyDown事件后跟暂停,然后按照系统偏好设置定义的速率开始重复。该解决方案不能用于连续的关键事件。

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

解决方案#2:Use Quarts Event Taps

看到Quartz Event Services Reference.它似乎是足够低的水平。

不可接受的缺点:需要在通用访问 – 键盘下的系统偏好设置中启用辅助设备。虽然默认情况下可能已启用,但不能保证在某些系统上可能会被关闭。

我还读到Quartz事件点击需要该应用程序以root用户身份运行,但没有发现任何确认。

解决方案#3:@L_403_3@

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

不可接受的缺点:没有人知道在未来的Mac OS版本中将继续支持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找到您想要做的文档

再次,这不会很快消失,与碳和碳事件完全分开。

总结

以上是内存溢出为你收集整理的osx – Mac OS X游戏如何接收低级别的键盘输入事件?全部内容,希望文章能够帮你解决osx – Mac OS X游戏如何接收低级别的键盘输入事件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1038037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存