2011-08-23 56 views
1

我使用的cocos2d的Mac(1.0.1)如何获取mac上键盘上某些键的状态?

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

//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,如果按下了一个键。

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

回答

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的文章中了解更多。