dealloc не запускается при замене сцен в Cocos2d - PullRequest
5 голосов
/ 08 марта 2011

По какой-то причине при замене сцены не срабатывает коллок на моем CCLayer. Вот код для замены сцены:

[[CCDirector sharedDirector] replaceScene:[CCFadeTransition transitionWithDuration:2.0f scene:[HelloWorld scene]]];

Приведенный выше код срабатывает, когда я нажимаю кнопку.

Я поместил NSLog внутри метода dealloc, который никогда не срабатывает.

ОБНОВЛЕНИЕ 1:

Я решил проблему, освободив память вручную перед заменой сцены.

Ответы [ 2 ]

6 голосов
/ 09 марта 2011

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

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:2]swallowsTouches:NO];

И я решил эту проблему, удалив всех делегатов (также васможно указать конкретного делегата):

[[CCTouchDispatcher sharedDispatcher] removeAllDelegates];

0 голосов
/ 09 марта 2011

Согласно этой записи на форуме cocos2d-iphone , вам просто нужно вызвать self.isTouchEnabled = YES; в методе init, чтобы включить Cocos2D для автоматического вызова метода removeDelegate: в CCTouchDispatcher.В основном, достаточно следующего кода:

- (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]; 
}

Нет необходимости в onEnter и onExit, поскольку они должны обрабатываться автоматически, если вы используете self.isTouchEnabled = YES;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...