что делать с таймерами при замене сцены? - PullRequest
2 голосов
/ 17 декабря 2011

после стольких чтений, я вижу, что так много недоразумений по поводу того, что я должен делать при замене сцены. на методе dealloc, я должен выпустить ВСЕ мои таймеры ?? или cocos2d это делает ??

У меня 3 таймера при запуске:

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

перед тем, как заменить сцену на меню (replaceScene), я делаю это:

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

но он падает. (Я видел, как люди говорили, что мне не нужно их отменять?)

, поэтому я попробовал это в моем dealloc :

[[CCScheduler sharedScheduler] unscheduleAllSelectorsForTarget: self];

, который также приводит к сбою во второй раз (происходит сбой в классе: CCScheduler.m)

в моем dealloc я также добавил это :( НУЖНО ЛИ ???)

delete _contactListener;
[self removeAllChildrenWithCleanup: ДА];
удалить мир;
world = NULL;
[super dealloc];

что здесь происходит? Может ли кто-нибудь дать мне представление о том, что следует делать в dealloc при замене сцен? что мне делать с моими таймерами ???

спасибо.

1 Ответ

2 голосов
/ 17 декабря 2011

Когда вы заменяете сцену, COCOS2d автоматически освобождает весь планировщик, который вы запустили для конкретной сцены или слоя. Вот почему вы написали [self scheduler: ...] ;. Планировщик Cocos2d несколько отличается от NSTimer.

Вам не нужно освобождать диспетчер, просто держите его пустым, не нужно беспокоиться,

- (void)dealloc {

    //memory deallocation  
[super dealloc];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...