0

私の init メソッドでは、このようなアニメーションのフレームを初期化します。

    walkingFrames = [NSMutableArray array];
    for(int i =2; i<34; i = i+2){
        if(i<10){
            [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-00%d.tif", i]]];
        }
        else{
            [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-0%d.tif", i]]];
        }
    }


 where walkingFrames is defined in the header file.

update メソッドでこのようなアニメーションを作成しようとすると、bad_access が発生します。

    CCAnimation *walkingAnimation = [CCAnimation animationWithSpriteFrames:walkingFrames delay:animationWalkingSpeed];
                    self.walkAction = [CCRepeatForever actionWithAction:
                                       [CCAnimate actionWithAnimation:walkingAnimation]];
                    [_guy runAction:_walkAction];

where walkAction is a CCAction property. 

何がうまくいかないのかを解決するのに苦労しています。

4

3 に答える 3

0

このコードで試してください。

[_guy runAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation: walkingAnimation restoreOriginalFrame:NO]]];
于 2012-12-20T05:32:54.730 に答える
0

クラッシュにつながる 2 つの問題を発見し、アニメーションが実行されませんでした。まず、更新メソッドで使用していたので、次のように NSMutableArray を初期化する必要がありました。

    walkingFrames = [[NSMutableArray alloc] init];

以前のやり方ではなく、次のようにしました。

    walkingFrames = [NSMutableArray array];

その後、アニメーションが実行されていないことに気付きましたが、クラッシュもしていませんでした。

私の CCSpriteFrameCache の問題でした。

私は次のように設定していました:

    CCSpriteFrameCache *frames = [[CCSpriteFrameCache sharedSpriteFrameCacher] addSpriteFramesWithFile:@"images.plist"];

私はこれをしていたはずです:

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"images.plist"];

そして、アニメーションを停止したいときにアニメーションの元のフレームを復元するには、次のことを行う必要がありました。

    [_guy stopAction:_walkAction];
    [_guy setDisplayFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"Frame-008.tif"]];
于 2012-12-21T15:15:41.870 に答える
0

まず、これは必要ありません。

if(i<10){
            [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-00%d.tif", i]]];
        }
        else{
            [walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-0%d.tif", i]]];
        }

代わりに、次のように書くことができます。

[walkingFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"Frame-%03i.tif", i]]];

そうは言っても、エラーについてもっと具体的に教えてもらえますか? エラーメッセージとは正確には何ですか、またどの行でそれを取得していますか? この行で取得している場合:

CCAnimation *walkingAnimation = [CCAnimation animationWithSpriteFrames:walkingFrames delay:animationWalkingSpeed];

最初に CCSpriteFrameCache のフレームを印刷して、それらのフレームがそこに表示されるかどうかを確認することをお勧めします。

于 2012-12-21T12:50:11.923 に答える