2011-12-21 3 views
0

나는 severals 레이어가 있고 그들에게 약간의 스프라이트가 추가되었습니다. 이 방식으로 액세서 시도 :시차가있는 코코스 2D 터치

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    return YES; 
} 

내 애플 I 화면을 터치 할 때 충돌 :

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:[touch view]]; 
    location = [[CCDirector sharedDirector] convertToGL:location]; 

    if(CGRectContainsPoint([[self getChildByTag:tagNumber] boundingBox], location)) { 
     CCLOG(@"You've touched the sprite!"); 
    } 
} 

이상한 점은이 방법이없는 경우이다. 어떤 아이디어 일지 몰라?

UPDATE :

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

답변

1

ccTouchBegan 이벤트는 수신하지만 ccTouchesBegan은 수신하지 않는 경우 (복수형 참고) CCTargetedTouchDelegate 프로토콜을 사용하고 있습니다. CCTouchDispatcher addTargetedDelegate를 사용하여 클래스를 등록한 것이므로 ccTouchXXXX가 아닌 ccTouchXXXX의 단 하나의 메소드 인 CCTargetedTouchDelegate 프로토콜을 사용해야합니다.

Xcode에서 표시하는 경고에주의해야합니다. ccTouchBegan을 구현하지 않으면 "선택기에 응답하지 않을 수 있습니다"라는 경고가 나타날 수 있습니다. 모든 경고는 심각해야합니다 (실제로 "모든 경고를 오류로 처리"하는 것이 좋습니다).

0

모든 오류는 콘솔에서 생산? 인식 할 수없는 선택기에 대한 문제가 있습니까? 내가 cocos2D에 참여한 이후로 꽤 오랜 시간이 걸렸지 만 두 번째 방법이 첫 번째 방법보다 우선하는지 확인해야합니다. 실제로 존재한다면, 존재하지 않을 때, 프로그램은 첫 번째 프로그램 (void를 반환하는 프로그램)을 사용할 것이므로 코드 구현의 실제 버그에 걸리게됩니다. 나는 '- (void) ccTouchesBegan : (NSSet *) touches with :(UIEvent *) event'의 첫 번째 줄 안의 중단 점을 설정하고, BOOL을 반환하는 함수를 삭제 한 다음 단계별로 어떤 일이 일어날지를 볼 것입니다. 디버거를 사용합니다.

그리고 콘솔 로그를 게시하십시오. 나는 당신이 "선택자를 찾을 수 없다", "자식을 찾을 수 없다"또는 "nil 인수로 인한 부적합한 인수 예외"문제가 있다고 믿는다.

그냥 생각해보십시오.

+0

[여기 내 로그] (http://pastie.org/private/qndnex0pgflefwhfuxlxpw); 네가 나에게 말했던 것과'ccTouchesBegan' 메서드가 호출되지 않았다. –

관련 문제