Cocos2d CCAnimate выдает EXC_BAD_ACCESS, когда все переменные еще живы
Я делаю игру-танк, и у меня проблемы с Cocos2d CCAnimate - точнее, мои переменные CCAnimation самопроизвольно теряют свои данные!
Они привыкают в сменщике состояния танкового объекта (tank.m)
-(void)changeState:(CharacterStates)newState {
[self stopAllActions];
id movementAction = nil;
action = nil;
//CCLOG(@"Change state from %i to %i",self.characterState, newState);
[self setCharacterState:newState];
switch (newState) {
case kStateIdle:
action = [CCAnimate actionWithAnimation: idleAnim //**ANIM
restoreOriginalFrame:NO]; //**ANIM
[action setTag:kStateIdle];
break;
case kStateMoving:
action = [CCAnimate actionWithAnimation: movingAnim //**ANIM
restoreOriginalFrame:NO]; //**ANIM
break;
}
if (action != nil) {
[self runAction:action];
}
}
'action' предопределен в файле.h танка - "id action;"
Когда игра инициализируется, танки (их четыре) инициализируются без проблем, и все они устанавливаются в 'kStateIdle' без проблем.
Затем основной цикл GameEngine вызывает танки для обновления - есть тест на их скорость и проверки, чтобы убедиться, что они еще не двигаются и не получают повреждений, а состояние изменяется на "kStateMoving" -
if (self.characterState != kStateMoving && self.characterState != kStateTakingDamage && abs(velocity)>0.4) {
[self changeState:kStateMoving];
Но тогда, когда игра доходит до
[CCAnimate actionWithAnimation: movingAnim restoreOriginalFrame: NO];
Cocos2d аварийно завершает работу с EXC_BAD_ACCESS в CCActionInterval (отладчик сообщает _cmd как initWithAnimation: restoreOriginalFrame')
Причина в том, что CCAnimation 'movingAnim' (и idleAnim) внезапно повреждены. Если я проверяю их в отладчике, они имеют адрес памяти, но не сообщают никакого значения для своих кадров. Все они были в порядке, когда танк был инициализирован. И у них все хорошо на танке игрока. Там нет ничего, что освобождает их (я даже удалил их из метода Dealloc).
Я определил их как (одноатомные, сохраняемые) свойства в заголовочном файле tank.h.
Так куда же они могли пойти? Есть ли способ разместить на них точку наблюдения? (У меня есть Xcode 4.3.2, поэтому в меню ничего нет).. Или есть способ определить их, чтобы они хранили свои данные?
Ура!
деревенщина
(PS. Ух ты! А потом я начинаю получать углы, рассчитанные при 3259 градусах, начинаю чесать голову и выслеживать числа (которые возвращаются к норме, когда я на них смотрю) и бам! Xcode просто полностью закрывается.
Довольно сложно отлаживать мою программу, когда сам редактор начинает генерировать воблер!)