2011-08-23 98 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的文章中瞭解更多。