显然,有足够的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游戏如何接收低级别的键盘输入事件?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)