游戏需要低级访问键盘输入.在Windows上,有DirectInput.但是Mac OS X游戏开发者使用什么技术呢?
显然,有足够的Mac游戏可以让键盘输入正确,没有众所周知的解决方案的缺点:
解决方案#1:使用keyUp/keyDown事件
-(void)keyUp:(NSEvent*)event;
-(void)keyDown:(NSEvent*)event;
Run Code Online (Sandbox Code Playgroud)
不可接受的缺点:根据"密钥重复率"和"密钥重复延迟"的系统首选项设置重复keyDown事件.这会导致初始keyDown事件,然后暂停,然后以系统首选项设置定义的速率开始重复.此解决方案不能用于连续的键事件.
我想知道是否可以禁用密钥重复行为?我想您可以读取第一个keyDown键,然后记住类中的"keyCode x is key"键,直到收到该键的keyUp事件,从而绕过重复延迟和重复率问题.
解决方案#2:使用Quarts事件选项卡
请参阅Quartz事件服务参考.它似乎足够低级.
不可接受的缺点:要求在通用访问 - 键盘下的系统首选项中启用辅助设备.虽然默认情况下可能会启用,但无法保证在某些系统上可能会将其关闭.
我还读到Quartz事件点击需要应用程序以root身份运行,但没有找到确认.
解决方案#3:Carbon Events/IOKit HID
该碳事件管理器参考标记为传统的,不应该被用于新的开发.
不可接受的缺点:没有人知道未来的Mac OS版本将继续支持Carbon事件多长时间.
除了作为遗留框架的碳之外,这似乎仍然是最好的解决方案.但是使用Carbon Events还有其他任何缺点吗?
问题:
Mac OS X游戏开发人员使用哪种技术来接收低级键盘输入事件?如果他们使用上述技术之一,他们如何解决我提到的缺点?
更新:
我最终转向使用常规NSEvent消息并将它们包装在一个简洁的API中以轮询键盘状态.
我正在攻击一个简单的Cocoa应用程序,以便像电子游戏一样让屏幕在屏幕上移动.我需要检测按键,但我不会像对话框那样有文本输入字段.
如何在没有文本控件的情况下获得按键操作?特别是,我需要获得箭头键.