在我的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.
我很难解决出错的问题。
答案 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"]];