2014-06-21 1 views
1

스프라이트 밖에있는 터치를 처리해야합니다. 즉 스프라이트 외부를 터치하면 스프라이트의 touchBegan 메서드를 호출해야합니다. 내가 어떻게 해?cocos2d 3.x 스프라이트 외부의 터치 처리 방법

3.x 버전을 사용 중이므로 CCTargetedTouchDelegate 우선 순위가 더 이상 존재하지 않는다는 것에 유의하십시오.

+0

터치가 스프라이트에 *있을 때만 터치가 수신되는지 확실합니까? 이것이 사실이라면, 해결책은 장면에 터치 이벤트를 추가하고 필요에 따라 메시지를 스프라이트에 전송하는 것입니다. – LearnCocos2D

+0

@ LearnCocos2D 네, touch가 sprite에있을 때만 호출됩니다. sprite는 cocos2d 2.x와는 다릅니다. 스프라이트 클래스에서 직접 콜백을받을 수있는 방법이 있습니까? 나는 장면과 스프라이트를 결합하는 것을 좋아하지 않는다. – OMGPOP

+0

모르겠다. 처음으로 나는이 행동이 바뀌 었다고 들었다. 참조를 유지할 필요는 없지만 장면에서 NSNotification을 보내고 Sprite를 알림 수신기로 등록하십시오. – LearnCocos2D

답변

1

나는 수동으로 터치 섭취 여부를 반환하는 공공 방법 ccTouchBegan 만드는 것입니다 제안 무엇 (처럼을적인 Cocos2D 2.0) 캔버스에

:

- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 
    BOOL swallowed = NO; 

    for (id child in _childNodes) { 
     if ([child ccTouchBegan:touch event:event]) { 
      swallowed = YES; 
     } 
    } 

    if (swallowed) { 
     return; 
    } 

    //continue the canvas touch handler 

} 

와 스프라이트의 :

- (BOOL)ccTouchBegan:(UITouch *)touch event:(UIEvent *)event { 

    //same usage as cocos2d 2.x 

} 


//and in the touch callback 
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { 

    if ([self ccTouchBegan:touch event:event]) { 
     //swallow 

    } 
    else { 
     //do not swallow, pass the touch 
     [super touchBegan:touch withEvent:event]; 

    } 
} 
+0

천재 솔루션. – OMGPOP