2013-04-24 2 views
0

CCsprite scheduleOnce 선택기가 두 번 호출되면 충돌이 발생합니다.Cocos2d 호출 scheduleOnce 선택기가 두 번 충돌합니다.

Assertion failure in -[CCScheduler scheduleSelector:forTarget:interval:paused:repeat:delay:], /Users/libs/cocos2d/CCScheduler.m:278  

[sprite scheduleOnce:@selector(resumeSchedulerAndActions) delay:time]; 

이 문제를 해결하는 방법은 무엇입니까?

+0

당신은 cocos2d 프레임 워크의 코드를 가지고 있습니다. CCScheduler 클래스에서 278 행의 어설 션 메시지를 볼 수없는 이유는 무엇입니까? – Morion

+0

CCScheduler. 대상과 다른 일시 중지 값으로 선택기를 예약하려고합니다.이 값은 어설 션이 말하는 것이지만 명확하지 않으며 어설 션은 내가 호출 한 메서드, 실제로는 하위 메서드에 없습니다. –

+0

이 어설 션에서 여러 줄의 코드에서 이전 일정이 활성화 될 때까지 메서드를 예약 할 수 없음을 알 수 있습니다. 여러 번 실행해야하는 경우 CCDelayTime 및 CCCallFunc 작업의 CCSequence를 만들고 실행할 수 있습니다. – Morion

답변

0

감사합니다. 전화로 해결했습니다.

[sprite unscheduleAllSelectors];

[sprite scheduleOnce:@selector(resumeSchedulerAndActions:) delay:time];

1

예약 된 선택자가 올바른 형식을 사용하지 않습니다. ccTime 유형의 매개 변수 하나를 사용해야합니다. 예약 된 선택기 끝에 콜론이 있어야합니다 :

[sprite scheduleOnce:@selector(resumeSchedulerAndActions:) delay:time]; 

를 그리고이 인터페이스가 있어야합니다 LearnCocos2D 및 @Morion @ 도움을

-(void) resumeSchedulerAndActions:(ccTime)delta 
{ 
    // here you can "forward" to the actual method you wanted to schedule 
    [self resumeSchedulerAndActions]; 
} 
+0

두 번 이상 호출 된 경우 스케줄러를 한 번 호출해도 문제가 없습니다. 그리고이 문제는 형식과 관련이 없습니다. 실제로 CCNode –

+0

에서 사용할 수있는 방법입니다. 한 번 작동하지만 불법 호출입니다. Cocos2D * 항상 * 델타 시간 매개 변수를 예약 된 방법으로 보냅니다. 예약 된 메소드가 단일 ccTime 매개 변수를 사용하지 않으면 바로 볼 수있는 문제는 아니지만 잘못된 방법이 발생할 수 있습니다. 이 호출은 스택 상에 외래 매개 변수를 전송할 것이며, 적어도 수신 함수에 대해 스택을 손상시킬 것이라고 나는 믿는다. – LearnCocos2D

+0

프리 프로세서 매크로 COCOS2D_DEBUG = 1을 빌드 설정에 추가합니다 (또는 릴리스를 빌드하는 경우 디버그 구성을 작성하십시오). 그러면 어설 션을 얻을 수 있습니다. CCScheduler.m의 193 번 줄에서 얻을 수있는 메시지는 다음과 같습니다. "선택자에 대한 서명을 찾을 수 없습니다 - 다음과 같은 형식입니까? - (void) name : (ccTime) dt" – LearnCocos2D

0

를 호출하기 전에 또 다른 해결책은 CCDirector 스케줄러를 사용하는 것입니다.

[[CCDirector sharedDirector].scheduler scheduleSelector:@selector(resumeSchedulerAndActions:) forTarget:self interval:0.1 repeat:0 delay:2 paused:NO];