我对Mac编程还很陌生,所以希望这不是显而易见的问题。
简而言之,我似乎没有得到多个按键事件。我创建了这个片段,它从未触发断言,因此也从未打印多个按键。但我可以得到单个按键的输出。
- (void)keyDown:(NSEvent *) theEvent {
NSString *characters = [theEvent characters];
assert([characters length]<2);
for (int i=0;i<[characters length];++i) {
NSLog(@"k=[%d]\n", [characters characterAtIndex:i]);
}
}
有人知道我做错了什么吗?如果您感兴趣,我需要在OpenGL查看应用程序中按多个键。也许我对这种应用程序完全没有头绪。
编辑:经过进一步研究,我找到了这个链接: http://www.cocoadev.com/index.pl?GameKeyBoardHandling 根据这里的讨论,这很有道理,因为只有最后一个键会重复。当keyDown事件被触发时,按下的键被放入set中,并在keyUp时被删除。这意味着该集合具有当前按下的键的完整集合,避免了只重复最后按住的键的问题。 这已经“够好了”,所以我现在正在使用这种方法。它似乎运行良好,并且因为它使用标准键盘事件系统(而不是HID),所以不应该有任何兼容性问题。
敬礼, Shane