如何获取Mac上键盘上某些键的状态?

时间:2011-08-23 19:52:28

标签: keyboard cocos2d-iphone key macos

我正在使用cocos2d for mac(1.0.1)

我有这两种方法(类似于苹果方法)

//keyboard delegate is defined - these methods are called
- (BOOL)ccKeyDown:(NSEvent *)event {
    unichar key = [[event characters] characterAtIndex:0];
    if (key == NSDownArrowFunctionKey) {
        // Down arrow pressed
    }
    if(key == NSUpArrowFunctionKey) {
        // Up arrow pressed
        return YES;
    }
    if(key == NSLeftArrowFunctionKey) {
        // Left arrow pressed
       something = -1.0f;
        return YES;

    } else if(key == NSRightArrowFunctionKey) {
        // Right arrow pressed
       something = 1.0f;
        return YES;
    } 
    return NO;
}
-(BOOL)ccKeyUp:(NSEvent *)event {
    unichar key = [[event characters] characterAtIndex:0];
    if (key == NSDownArrowFunctionKey) {
        // Down arrow pressed
    }
    if(key == NSUpArrowFunctionKey) {
        // Up arrow pressed
    }
    if(key == NSLeftArrowFunctionKey || key == NSRightArrowFunctionKey) {
        // Left arrow pressed
       something = 0.0f;
    } 

    return YES;
}

我想称之为:

something = 0.0f;

如果未按下/按住左箭头键和右箭头键。据我所知,只有在按下并释放按键时才会调用ccKeyUp。如果按下某个键,则为ccKeyDown。

如何获取当前键盘状态以检查其状态的几个键?

1 个答案:

答案 0 :(得分:2)

Cocos2D没有提供只检查键盘按键状态的方法。

Kobold2D does。使用Kobold2D,您可以执行以下操作:

KKInput* input = [KKInput sharedInput];
if ([input isKeyDown:KKKeyCode_LeftArrow] == NO && 
    [input isKeyDown:KKKeyCode_RightArrow] == NO)
{
    something = 0.0f;
}

另外,作为旁注,将字符用于键盘事件是不好的做法:

unichar key = [[event characters] characterAtIndex:0];

问题在于用户的语言环境(键盘输入语言)改变了需要按下哪个键或键组合来生成该字符。例如,当/(斜杠)键方便地位于右Shift键左侧的美国键盘上时,在德语键盘上,用户必须按Shift + 7才能执行已映射到/字符的操作。您可以在我关于Correctly Processing Mac Keyboard Events的文章中了解有关此内容的更多信息。