2011-12-17 5 views
2

많은 책을 읽은 후, 장면을 바꿀 때 무엇을해야하는지에 대한 이해가 너무 많이 있다는 것을 알 수 있습니다. dealloc 메서드에서 모든 타이머를 해제해야합니까 ?? 또는 cocos2d는 그것을합니까 ??장면을 바꿀 때 타이머로 무엇을할까요?

은 내가 시작시 3 개 타이머를 가지고 :

[self schedule: @selector(contact:)]; 
[self schedule:@selector(tick:)]; 
[self schedule: @selector(randomsActions:) interval:0.1]; 

전 메뉴 (replaceScene를) 장면을 대체 befor을 나는이 수행합니다.

[self unschedule:@selector(randomsActions:)] ; //stop timer 
    [self unschedule:@selector(contact:)] ; //stop timer 
    [self unschedule:@selector(contact:)] ; //stop timer 

하지만 충돌 (내가 본 사람들이 말하는 난을 그들을 스케줄 해제 할 필요가 없습니다) 그래서 난 내 의 dealloc이 시도

:

을 그것은 또한 두 번째 시간 (클래스의 충돌 : CCScheduler.m) 충돌
[[CCScheduler sharedScheduler] unscheduleAllSelectorsForTarget: self]; 

내 할당 해제에

내가이 :(를 넣어 내가 ???해야합니까)

삭제 _contactListener;
[self removeAllChildrenWithCleanup : 예];
세계 삭제;
world = NULL;
[super dealloc];

여기에 무슨 일이 일어 났습니까? 장면을 바꿀 때 dealloc에서 수행해야하는 작업에 대해 누군가 나에게 알릴 수 있습니까? 내 타이머로 무엇을해야합니까 ???

감사합니다.

답변

2

장면을 바꾸면 COCOS2d는 특정 장면이나 레이어에 대해 시작한 모든 스케줄러를 자동으로 할당 취소합니다. 그게 왜 당신이 쓴 [셀프 스케줄러 : ...] ;. Cocos2d Scheduler는 NSTimer와 다소 다릅니다.

당신은

- (void)dealloc { 

    //memory deallocation 
[super dealloc]; 
} 
+0

내 주요 문제는 내가 장면을 게임 메뉴에서 다시 이동하려고 할 때 충돌이었다, 단지 걱정할 필요가 없습니다, 빈 계속 그것을 sccheduler를 할당 해제 할 필요가 없습니다. CCScheduler.m 클래스에서 - (void) update : (ccTime) dt 메서드가 충돌합니다. 그게 왜? 타이머와 관련이 있습니까? – Curnelious

+0

CCScheduler는 cocos2d의 내부 메커니즘에 의해 사용되고 있습니다. 같은 터치 이벤트 등 다른 부분에서 뭔가 잘못하고있는 방법을하지 않도록하십시오. – max9xs

관련 문제