运行操作失败

时间:2013-03-19 18:34:41

标签: xcode cocos2d-iphone

所以在我的游戏中我想要一个简单的逐帧动画。当我在init函数中使用它时,动画工作正常,但是一旦我停止动作并尝试重新启动它就没有任何反应。

这是在init

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
         @"Dubstep Dan_default.plist"];
        CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode
                                          batchNodeWithFile:@"Dubstep Dan_default.png"];
        [self addChild:spriteSheet];

        walkAnimFrames = [NSMutableArray array];
        for(int i = 1; i <= 8; ++i) {
            [walkAnimFrames addObject:
             [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
              [NSString stringWithFormat:@"1-%d.png", i]]];
        }
        walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f];

        self.character = [CCSprite spriteWithSpriteFrameName:@"1-1.png"];
        _character.position = ccp(80, 260);
        self.walkAction = [CCRepeatForever actionWithAction:
                           [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];
       // self.walkAction = [CCAnimate actionWithAnimation:walkAnim];
        [_character runAction:_walkAction];
        [_walkAction retain]; 
        [spriteSheet addChild:_character];

这是我的游戏刻度函数

if(gp.isControlling && (gp.controlQuadrant == 0 || gp.controlQuadrant == 1) && (_character.position.x < 250))
    {

        if([_walkAction isDone]) {
            [_character runAction:_walkAction];
            NSLog(@"TEST"); 
        }
        targetX = 7;
        _character.scale = 1;
    }
else {
        [_character stopAction:_walkAction];
        targetX = 0;

2 个答案:

答案 0 :(得分:0)

Cocos2d操作不可重入(可重用)。跑一次忘了。需要再次运行?创建一个新动作。

有尝试解决这个问题,但我通常建议反对它,因为根据重用的操作,通过再次调用它们的init方法重用动作可能会泄漏内存。再加上在对象上再次调用init是一种糟糕的风格。

答案 1 :(得分:0)

我能用一个简单的布尔值

解决问题
 if(!_moving) {
            [_character runAction:_walkAction];
            _moving = TRUE;
        }