0

我正在制作坦克游戏,但我在使用 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 完全关闭。

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

4

0 回答 0