2012-06-15 7 views
1

CCLayer (텍스트 항목 등의) 숫자가 포함 된 CCLayer이 있습니다. 내가 왼쪽에있는 다른 CCLayer을 가지고 있는데,이 '장면'의 썸네일을 표시하고 싶습니다.두 개의 레이어로 처리되는 터치

왼손 CCScrollLayer은 경계 내에있는 터치에 응답해야하며 오른쪽 레이어의 요소는 개별 경계 내에서 터치해야합니다.

내가보기에 문제는 내가 오른쪽에 레이어를 드래그하면 왼쪽의 CCScrollLayer이 응답하고 스크롤한다는 것입니다. 스크롤 레이어를 스크롤 할 때 오른쪽의 요소는 영향을받지 않습니다. 그것은 마치 CCScrollLayer의 경계가 너무 큽니다. 심지어 100 픽셀 너비로 의도적으로 설정했기 때문에 아닙니다. 여기 직장에서 설명 할 수없는 행동이 있습니까?

효과

는 기본적으로 http://imageshack.us/photo/my-images/210/dragd.png/

답변

1

에서 볼 수있는, CCLayer 표준 터치 대리인으로 등록 할 수 있습니다. 대상 대리인으로 등록해야합니다. 이 경우 CCLayer는 터치를 주장 할 수 있고 다른 터치 할 수있는 요소는이를받을 수 없습니다. 당신은 당신의 ccTouchBegan:withEvent: 방법은 단지 '돈이

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    BOOL shouldClaimTouch = NO; 
    BOOL layerContainsPoint = // check if current layer contains UITouch position 
    if(layerContainsPoint) 
    { 
     shouldClaimTouch = YES; 
    } 

    // do anything you want 

    return shouldClaimTouch; 
} 

처럼해야

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event; 
@optional 
// touch updates: 
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event; 
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event; 
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event; 

이 사람과 당신의 대리자 메서드를 교체해야합니다이 후 CCLayer 방법

-(void) registerWithTouchDispatcher 
{ 
    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority: self.priority swallowsTouches:YES]; 
} 

를 재정 의하여 그것을 할 수 있습니다 터치의 UI 좌표를 GL로 변환하는 것을 잊지 마십시오. 이 메서드가 YES를 반환하면이 터치는 다른 레이어에서 수신되지 않습니다.

+0

이 답변은 최신 Cocos2D에서 유효합니까? 편집 : 이것은 현재 (같은) 답변 것 같다 http://www.cocos2d-iphone.org/wiki/doku.php/tips:touchdelegates – Jonny

+0

아직 공식 문서는 구식입니다. 프로토콜 이름이 오래 전에 변경되었습니다. – Jonny

0

감사합니다. @Morion, 그게 전부입니다. 내 탐지 방법은 다음과 같습니다.

StoryElementLayer *newLayer = nil; 
    for (StoryElementLayer *elementLayer in self.children) { 
     if (CGRectContainsPoint(elementLayer.boundingBox, touchLocation)) {    
      newLayer = elementLayer; 
      break; 
     } 
    } 
관련 문제