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.

当我尝试在我的更新方法中创建这样的动画时,我得到一个 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

首先,没有必要这样做:

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 回答
0

我发现了两个导致崩溃的问题,然后动画没有运行。首先,我应该像这样初始化我的 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 回答