2012-11-16 3 views
0

안녕 동료적인 Cocos2D 게임 개발자들, 내가 한 게임이고, 다른 하나는 HUD가 그래서 구현,CCLayer UIGestureRecognizer 및 HUD

내가 그것을 두 CCLayers이있는 CCScene을 구현하고 간단한 문제를했습니다 :

+ (CCScene *)scene { 
    CCScene *scene = [CCScene node]; 
    LevelLayer *layer = [LevelLayer node]; 
    LevelHUDLayer *hud = [LevelHUDLayer node]; 
    layer = [layer init]; 

    [layer setHUDLayer:hud]; 
    [hud setParentLevel:layer]; 

    [scene addChild:hud z:HUD_ZLevel]; 
    [scene addChild:layer]; 

    return scene; 
} 

위대한 작품입니다. 나는 또한 그래서 구현하는 UIPinchGestureRecognizer 있습니다

- (void)onEnterTransitionDidFinish { 
    pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(makePinch:)]; 
    [[CCDirector sharedDirector].view addGestureRecognizer:pinch]; 
} 

을 그리고 난 그렇게 같은 코드에서 나중에 제스처를 잡을 :

self.scale = pinch.scale; 

이 완벽하게 작동 난 단지 게임을 보장 할 제외 계층은 HUDLayer가 아니라 제스처를 선택합니다. 현재 HUDLayer의 컨트롤을 터치하고 캐릭터를 화면에서 움직이면 레벨이 조정되므로 상당히 짜증나게됩니다.

제 질문은 어떻게 제스처 인식기를 선택하기 위해 LevelLayer 만 할당할까요? CCLayer의 UIView에 액세스 할 수 있다면 쉽게 할 수있을 것 같지만 CCDirector.sharedDirector에만 액세스 할 수있는 것처럼 보입니다.

감사합니다.

답변

0

CCLayer의보기에 액세스 할 수없는 이유는 간단합니다. 존재하지 않습니다. 모든 cocos2d 논리는 단일 OpenGL보기로 만들어집니다.

제스처 인식기 영역을 제한하려면 위임 방법 gestureRecognizerShouldBegin:을 구현할 수 있습니다. 거기에서 터치의 위치를 ​​확인하고 NO이 게임 층이 아닌 HUD 위에 있다면이를 반환 할 수 있습니다.

또 다른 방법은 cocos2d의 CCTouchDispatcher를 사용하여 자신의 제스처 인식기를 구현하는 것입니다.

+0

입력 해 주셔서 감사합니다. 지금 gestureRecognizerShouldBegin 방법을 시도하고 있지만 하위 레이어가 입력을 받았는지 확인하는 방법이 궁금합니다. HUD 컨트롤에는 터치를 전달할 수있는 투명한 부분이 있으므로 중요합니다. – Parad0x13