0

私のゲームでは、単純なフレームごとのアニメーションが必要です。アニメーションは、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;
4

2 に答える 2

0

Cocos2d アクションは再入可能 (再利用可能) ではありません。一度実行して忘れてください。もう一度実行する必要がありますか? 新しいアクションを作成します。

これを回避する試みはありますが、再利用されるアクションによっては、init メソッドを再度呼び出してアクションを再利用することでメモリ リークが発生する可能性があるため、一般的には使用しないことをお勧めします。さらに、オブジェクトに対して init を再度呼び出すのはスタイルが悪いだけです。

于 2013-03-19T19:22:55.837 に答える
0

単純なブール値で問題を解決できました

 if(!_moving) {
            [_character runAction:_walkAction];
            _moving = TRUE;
        }
于 2013-03-22T00:14:47.583 に答える