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 просто полностью закрывается.

Довольно сложно отлаживать мою программу, когда сам редактор начинает генерировать воблер!)

0 ответов

Другие вопросы по тегам