* 그냥 급하게 지원하게 코드만 수정한 버전입니다. 공식 버전에서 곧 지원될때 까지만 사용 바랍니다. 전체 코드를 몰라서 그냥 후다닥 Copy&Paste로 지원 가능하게만 했은 성능상에 문제가 있을 수도 있습니다.
v2까지는 키보드 델리게이트를 사용해서 잘 먹었는데, 왜 v3에서는 빠졌는지 모르겠습니다. 추후 버전에서 지원이 될 거라고 생각합니다. Mac 에서는 기본적으로 키보드 게임이 어울리니까요.
기본 템플레이트 파일을 빌드해서 키보드를 누르면 '딩' '딩' 소리만 스피커에서 나옵니다. 키 이벤트를 못 받는다는 소리라고 하네요. NSWindow에서 입력을 처리 하도록 할려니 잘 모르겠습니다. 그래서 cocos2d를 까니 mouse&touch 핸들러가 있어서 살짝 수정했습니다.
CCGLView.m 파일 아래 쯤에 추가.
- (void) keyDown:(NSEvent *)theEvent {
[[CCDirector sharedDirector].responderManager keyDown:theEvent];
}
- (void) keyUp:(NSEvent *)theEvent {
[[CCDirector sharedDirector].responderManager keyUp:theEvent];
}
CCResponder.h 파일 아래 쯤에 추가.
- (void)keyDown:(NSEvent *)theEvent;
- (void)keyUp:(NSEvent *)theEvent;
CCResponder.m 파일 아래 쯤에 추가.
-(void)keyDown:(NSEvent *)theEvent{
[[CCDirector sharedDirector].responderManager discardCurrentEvent];
}
-(void)keyUp:(NSEvent *)theEvent{
[[CCDirector sharedDirector].responderManager discardCurrentEvent];
}
CCResponderManager.m 파일 아래 쯤에 추가. // 이 부분이 가장 난해해서 걍 적당히 소스를 고쳐서 사용했습니다.
- (void)keyDown:(NSEvent *)theEvent{
if (!_enabled) return;
[[CCDirector sharedDirector].view.window makeFirstResponder:[CCDirector sharedDirector].view];
if (_dirty) [self buildResponderList];
// scan backwards through mouse responders
for (int index = _responderListCount - 1; index >= 0; index --)
{
CCNode *node = _responderList[index];
[node keyDown:theEvent];
}
}
- (void)keyUp:(NSEvent *)theEvent{
if (!_enabled) return;
[[CCDirector sharedDirector].view.window makeFirstResponder:[CCDirector sharedDirector].view];
if (_dirty) [self buildResponderList];
// scan backwards through mouse responders
for (int index = _responderListCount - 1; index >= 0; index --)
{
CCNode *node = _responderList[index];
[node keyUp:theEvent];
}
}
이렇게 하고 키 이벤트를 받게 하고 빌드를 해서 실행을 하면 화면을 한 번 클릭을 하고 나서는 키 이벤트를 잘 받는데 클릭 전에는 이벤트를 받지 못합니다. 클릭을 한번 하면 GLView에서 이벤트를 받는데 그전에는 NSWindow에서 받아서 그런가 봅니다. 그래서 꼼수를 살짝.
AppDelegate.m 에서 아래와 같이 코드를 추가합니다. 걍 GLView에 한번 키 다운을 해주는 겁니다. ...
[_glView keyDown:nil];
이렇게 하면 다음 키 다운&업 이벤트를 잘 받습니다.
프로젝트 내에서 소스 코드를 수정하면 매번 프로젝트 생성때 마다 수정을 해줘야 하니..
~/Library/Developer/Xcode/Templates/ 디렉토리에서 위 파일에 맞는 곳을 찾아서 수정을 하면 기본 템플릿으로 설정이 됩니다.
'iDev > Cocos2D' 카테고리의 다른 글
다윤이와 함께 게임 만들기 - 게임 개발 중 (0) | 2014.03.07 |
---|---|
cocos2d v3 for Mac, 레티나 버그 패치 (0) | 2014.03.06 |
cocos2d v3에서 collision detection 하기 (0) | 2014.03.02 |
Apportable로 cocos2d 게임을 안드로이드 포팅시 해상도 문제 해결 방법 (0) | 2014.02.28 |
Flappy Bird 따라 만들기 (손) 연재 예정 - cocos2d v3 RC1 (4) | 2014.02.09 |