当所有变量仍然存在时,Cocos2d CCAnimate会提供EXC_BAD_ACCESS

时间:2012-08-23 23:48:55

标签: animation crash cocos2d-iphone exc-bad-access watchpoint

我正在进行坦克游戏,而且我遇到了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在'CCActionInterval'中与'EXC_BAD_ACCESS'崩溃,(调试器将_cmd报告为'initWithAnimation:restoreOriginalFrame')

之所以如此,是因为CCAnimation'movingAnim'(和idleAnim)突然被破坏了。如果我在调试器中检查它们,它们有一个内存地址,但是没有报告它们的帧的值。 坦克初始化时它们都很好。他们在球员坦克上都很好。没有任何东西可以释放它们(我甚至将它们从Dealloc方法中移除)。

我将它们定义为tank.h头文件中的(单原子,保留)属性。

那么他们可能会去哪里?有没有办法在他们身上放置观察点? (我有Xcode 4.3.2,菜单中没有任何内容)..或者有没有办法定义它们以便保存数据?

干杯!

卡尔

(PS。哇!然后我开始获得计算在3259度的角度,我开始挠头并追踪数字(每当我看到它们时会恢复正常)和bam!Xcode完全关闭。

当编辑器本身开始抛出摇摆器时,很难调试我的程序!)

0 个答案:

没有答案