不完全是.使用Cocoa在游戏中处理键盘输入的正确方法是什么?

sar*_*sjo 17 macos cocoa

假设您正在为Mac OS X创建游戏.事实上,假设您正在创建Quake,只有2011年,您更愿意只使用现代的,不推荐使用的框架.

当用户按下(或释放)键盘上的任何键时,您希望通知您的游戏.这包括修改键,如移位和控制.编辑添加:此外,您想知道是否按下了修改键的左侧或右侧版本.

您还希望您的游戏具有配置屏幕,用户可以在其中检查和修改键盘配置.它应包含以下内容:

  • 前进:W
  • 跳跃:空间
  • 消防:LCTRL

你是做什么?我一直试图找到一个好的答案,但现在已经有一天了,但还没有成功.

这就是我想出的:

  • 子类NSResponder,实现keyUp:和keyDown:,就像在这个答案中一样.这种方法的一个问题是,当用户只按下修饰键时,不会调用keyUp:和keyDown :. 要解决这个问题,你可以实现flagsChanged:,但这感觉就像一个黑客.
  • 使用石英事件点击.这仅在应用程序以root身份运行或用户已启用辅助设备访问权限时才有效.此外,修饰键事件仍不计为常规键事件.
  • 使用HIToolbox.在10.6开发人员文档中几乎没有提及它.它似乎非常非常弃用.

那么,这样做的正确方法是什么?这真的感觉就像一个应该有一个众所周知的,记录良好的解决方案的问题.这不像游戏是非常小众的.

Jen*_*ton 7

正如其他人所说,使用没有任何问题-flagsChanged:.还有另一种选择:使用IOKit HID API.无论如何你应该使用它来进行操纵杆/游戏手柄输入,可以说是鼠标输入; 键盘输入可能也可能不方便,具体取决于你正在做什么.

  • 将HID用于键事件的一个复杂因素是将键映射到配置接口的字符和符号.方便的是,我为此编写了一个库.我多年没有测试过,但最后我听说它有效.http://jens.ayton.se/code/keynaming/ (2认同)