gpt4 book ai didi

cocoa - 在 Cocoa (OS X) 中按住多个键

转载 作者:行者123 更新时间:2023-12-03 16:17:45 25 4
gpt4 key购买 nike

我是 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),所以不应该有任何兼容性问题。

问候,谢恩

最佳答案

有一件事是,您正在测试事件中的字符数,该数量几乎总是 1。在事件中获取超过 1 个字符的最常见方法是使用非西方字符的 IME 输入法。

目前尚不清楚您想要实现什么目标。如果您尝试对用户按下并按住某个键使用react,您将收到多个 keyDown: 事件。在第一个事件上调用 isARepeat 将返回 NO,在后续事件上调用 isARepeat 将返回 YES。

如果您尝试同时检测多个按键,那么您需要自己跟踪 keyDown: 和 keyUp: 之间的按键状态。因此,如果您同时按下 f 和 g,您将得到一个或多个 keyDown: with f 和一个或多个 keyDown: with g。然后,如果您在按住 g 的同时释放 f,您将获得 keyUp: for f,同时继续接收 keyDown: for g。您可以为您获得的每个键设置一个标志,然后在键按下时清除该标志。

如果这些都不是您想要做的,那么您可能需要进一步解释您正在做什么。

关于cocoa - 在 Cocoa (OS X) 中按住多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1151516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com