2011-08-23 3 views
1

나는 Mac 용적인 Cocos2D를 사용하고 (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에 대해 자세히 알아볼 수 있습니다.

관련 문제