CCAnimation不起作用

时间:2012-12-20 05:26:44

标签: iphone cocos2d-iphone ccaction

在我的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. 

我很难解决出错的问题。

3 个答案:

答案 0 :(得分:0)

尝试使用此代码..

[_guy runAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation: walkingAnimation restoreOriginalFrame:NO]]];

答案 1 :(得分: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中的帧,然后查看这些帧是否出现在那里。

答案 2 :(得分: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"]];