2

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

可以同时按下。

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

Objective-C

4

3 回答 3

2

与许多事情一样,有多种方法可以做到这一点。然而,一种简单的方法是-keyDown:在您的 NSView 子类中覆盖。据推测,这将是绘制钢琴键盘的 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 的事件处理指南

于 2012-07-06T03:36:39.080 回答
1

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

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

    switch (characters)
    {
        case 'd':
             //do something;
        default:
             break;
     }
}
于 2012-07-06T03:40:15.460 回答
0

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

我是 KeyCode 。样本 kVK_End

while (true)

{

    for (int i=0; i<128; i++)
    {
        if (CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState,i))
        {
            NSLog(@"Key Press");
        }
    }
}
于 2013-01-16T06:35:11.847 回答