我在设置动画我的精灵表时遇到了一些问题。我之前得到了这个代码并且它有效。我有2帧,我的循环中的变量只允许达到0和1的值,因为帧名是stickman0-568.png和stickman1-568.png。我的画面不太好,所以我制作了一张新的精灵表,其中有3帧,stickman0-568.png,stickman1-568.png和stickman2-568.png。我的.list文件名为sickman-568.plist,.png精灵表名为stickman-568.png。我改变了循环,所以我只能达到2(0,1,2)的值。当我现在运行它时,它会崩溃,尽管它在我只有2帧之前工作。任何人都可以给我一些关于可能出错的建议吗?这是我的代码,所以你可以看到我做了什么:
-(id) init
{
if( (self=[super init]) )
{
backGroundDesert = [CCSprite spriteWithFile:@"DesertMap.png"];
backGroundDesert.position = ccp(backGroundDesert.textureRect.size.width/2, backGroundDesert.textureRect.size.height/2);
[self addChild:backGroundDesert];
[backGroundDesert runAction:[CCMoveBy actionWithDuration:100 position:ccp(-1400,0)]];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"stickman-568.plist"];
CCSprite *mainGuy = [CCSprite spriteWithSpriteFrameName:@"stickman0-568.png"];
mainGuy.position = ccp(40,backGroundDesert.textureRect.size.height/2);
CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"stickman-568.png"];
[batchNode addChild:mainGuy];
[self addChild:batchNode];
NSMutableArray *animFrames = [NSMutableArray array];
for(int i = 0; i < 3; i++)
{
CCSpriteFrame *frames = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"stickman%02d-568.png", i]];
[animFrames addObject:frames];
}
CCAnimation *cape = [CCAnimation animationWithSpriteFrames:animFrames delay:0.2f];
[mainGuy runAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:cape restoreOriginalFrame:NO]]];
}
return self;
}
-(void)dealloc
{
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[super dealloc];
}
答案 0 :(得分:1)
当你运行代码时,for循环创建如下图所示的图像
stickman00-568.png
stickman01-568.png
stickman02-568.png
这不是您的来源中的图片,因此只能替换for循环代码中的以下行。它工作正常。
更改以下代码。
CCSpriteFrame *frames = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"stickman%d-568.png", i]];