更换场景时如何处理计时器?

时间:2011-12-17 10:43:30

标签: cocos2d-iphone

经过这么多的阅读后,我可以看到,在更换场景时我应该做些什么。 在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我也把它:(我需要吗?)

  

删除_contactListener;
    [self removeAllChildrenWithCleanup:   YES];
  删除世界;
  world = NULL;
  [super dealloc];

这里发生了什么? 有人可以让我知道在更换场景时应该在dealloc中做些什么吗? 怎么办我的计时器?

谢谢。

1 个答案:

答案 0 :(得分:2)

当您替换场景时,COCOS2d会自动释放您为特定场景或图层启动的所有调度程序。这就是为什么你写[self scheduler:...] ;. Cocos2d Scheduler与NSTimer略有不同。

你不需要对sccheduler进行dealloc只是保持空白,不用担心,

- (void)dealloc {

    //memory deallocation  
[super dealloc];
}