Cocos2d iphone 在Cocos2d中替换场景时未激发解除锁定

Cocos2d iphone 在Cocos2d中替换场景时未激发解除锁定,cocos2d-iphone,Cocos2d Iphone,由于某些原因,在替换场景时,我的CCLayer的解除锁定不会触发。以下是替换场景的代码: [[CCDirector sharedDirector] replaceScene:[CCFadeTransition transitionWithDuration:2.0f scene:[HelloWorld scene]]]; 当我按下按钮时,会触发上述代码 我在dealloc方法中放置了一个NSLog,它从未被触发 更新1: 在替换场景之前,我通过手动释放内存解决了这个问题 当我第一次开始使用coc

由于某些原因,在替换场景时,我的CCLayer的解除锁定不会触发。以下是替换场景的代码:

[[CCDirector sharedDirector] replaceScene:[CCFadeTransition transitionWithDuration:2.0f scene:[HelloWorld scene]]];
当我按下按钮时,会触发上述代码

我在dealloc方法中放置了一个NSLog,它从未被触发

更新1:


在替换场景之前,我通过手动释放内存解决了这个问题

当我第一次开始使用cocos2d时,我遇到了完全相同的问题。 在我的例子中,我被添加为目标代表自我,这意味着对自我的引用计数增加了


[[CCTouchDispatcher sharedDispatcher]addTargetedElegate:自优先级:2]燕子接触:否];

我通过删除所有委托(也可以指定特定委托)解决了这个问题:


[[CCTouchDispatcher sharedDispatcher]移除所有代理];

根据,您只需调用
self.isTouchEnabled=YESinit
方法中的code>,启用Cocos2D自动调用CCTouchDispatcher上的
RemoveDeleteGate:
方法。基本上,以下代码就足够了:

- (void)init {
   // do the usual [super init] stuff


   self.isTouchEnabled = YES; // don't forget the self prefix!

   return self;
}

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

无需使用
oneter
onExit
,因为如果使用
self.isTouchEnabled=YES,则应自动处理它们

听起来被HelloWorld场景替换的场景没有发布。你是如何实例化场景的?它是如何拥有你的CCLayer实例的?这意味着有东西在保留该层。你是否将当前层的任何引用传递给了任何其他对象?类似于Layer=currentLayer?@Lim Gim Hong,我确实将该层的引用传递给了其他类。您可能回答了部分问题,但没有说明原因。在我看来,这个问题是关于管理场景的内存的,我不是100%确定,但听起来好像你在说,场景将自己添加为触摸代理。因此,touch dispatcher会抓住它。我遇到了与@azamsharp相同的问题,我更想知道为什么手动设置“isTouchEnabled”会导致场景被正确释放。