【问题标题】:Mac: Check for keyboard eventsMac:检查键盘事件
【发布时间】:2012-07-06 12:11:58
【问题描述】:

我正在为 Mac 制作一个简单的钢琴游戏。而当用户按下键盘时,钢琴的琴键

可以同时按下。

但是,我对如何检查何时在 Mac 键盘上按下“D,F .....”键一无所知。

目标-C

【问题讨论】:

标签: objective-c macos cocoa keyboard


【解决方案1】:

与许多事情一样,有多种方法可以做到这一点。然而,一个简单的方法是在您的 NSView 子类中覆盖 -keyDown:。据推测,这将是绘制钢琴键盘的 NSView 子类。示例:

- (void)keyDown:(NSEvent *)event
{
    switch ([event keyCode])
    {
        case 0x02:
            // D key pressed
            break;
        case 0x03:
            // F key pressed
            break;
        // etc.
    }
}

我发现Key Codes 应用程序可以方便地查找关键代码,但您也可以在您的-keyDown: 方法中添加一个日志语句,然后按下键来查找相应的代码。它们也在<HIToolbox/Events.h> 标头中。

更多信息请参见Apple's Event Handling Guide。

【讨论】:

  • 谢谢,但我是新手。我应该在哪里以及如何覆盖 - keydown:现在,我在 viewController 中绘制钢琴。对吗?谢谢。
  • 您在用于绘制钢琴键的 NSView 子类中覆盖 -keyDown:。为了实际接收关键事件,视图必须是第一响应者。您可以通过在包含视图的窗口上调用[window makeFirstResponder:pianoView] 使视图成为第一响应者。我在我的答案中添加了指向相关文档的链接。你应该读一下。
【解决方案2】:

你有一个 NSView 子类作为钢琴视图吗?如果你这样做了,那么只需覆盖-(void)keyDown:(NSEvent *)event 方法,并记录下你想要的任何键。例如:

-(void)keyDown:(NSEvent *)event {
    NSString *characters;
    characters = [event characters];

    switch (characters)
    {
        case 'd':
             //do something;
        default:
             break;
     }
}

【讨论】:

  • 那你用什么来展示钢琴呢?
  • 我将此方法添加到 NSView 子类中。但无法检查键盘事件。我是新手,也许我用错了这个方法。如果你能给我一个演示。我会很感激的。
  • keyDown 方法是否只在 textView 或 textField 中有效?我找到了一个演示,但只能在 textField 中使用。我在 viewController 中显示钢琴,然后当我按键盘时,什么也没发生。
  • keyDown:适用于每个 NSView。如果您使用的是 viewController,那么您是否有要显示的 NSView 子类?如果不这样做,强烈建议您将其子类化以用于绘图目的,然后您可以覆盖 keyDown:另外,正如@Andrew Madsen 所说,您需要将视图设置为 First Responder 才能实际接收关键事件。
  • 终于解决了,非常感谢!
【解决方案3】:

通过使用此代码,您可以捕获所有按键事件。

i 是 KeyCode 。样本 kVK_End

while (true)

{

    for (int i=0; i<128; i++)
    {
        if (CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState,i))
        {
            NSLog(@"Key Press");
        }
    }
}

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 2020-06-22
    • 2014-06-22
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多