cocos2d v3 Sprite动画问题

时间:2014-04-01 20:17:08

标签: cocos2d-iphone ccsprite

精灵动画问题。

使用这个似乎适用于其他人的例子: How to create animation in cocos2d 3.0?

所以我这样做:

NSMutableArray *ballAnimFrames = [NSMutableArray array];

for(int i = 1; i <= 11; ++i)
{
[ballAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache]     
  spriteFrameByName: [NSString stringWithFormat:@"discoball1200x2008c16-%d.png", i]]];
}

CCAnimation *ballAnim = [CCAnimation
                         animationWithSpriteFrames:ballAnimFrames delay:0.1f];

discoBallSprite = [CCSprite spriteWithImageNamed:@"discoball1200x2008c16-1.png"];

discoBallSprite.position  = ccp(upper1Body.position.x,upper1Body.position.y-200);

CCActionAnimate *animationAction = [CCActionAnimate actionWithAnimation:ballAnim];
CCActionRepeatForever *repeatingAnimation = [CCActionRepeatForever actionWithAction:animationAction];
discoBallSprite.scaleX = 0.25;
discoBallSprite.scaleY = 0.25;

[discoBallSprite runAction:repeatingAnimation];

[self addChild:discoBallSprite z:10];

我收到以下错误: 'NSInvalidArgumentException',原因:'*** - [__ NSArrayM insertObject:atIndex:]:对象不能为零'

显然错误信息是说我的图片文件是零,但看起来很好。

我尝试重命名文件以删除额外的“ - ”字符但没有更改(我还重命名了Xcode以外的文件并使用新名称重新导入)。

我的所有图片都在Resources文件夹中。

我尝试将图像从Resources文件夹移到下一级但仍然是错误。

它们的命名似乎很好。

还有什么想法可以检查吗?

2 个答案:

答案 0 :(得分:0)

制作精灵表,将其添加到你的

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

现在在动画代码中

[ballAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [YourAnim.png", i]]];

当你制作精灵表时它会做两件事,1)带有精灵的png和2)带坐标的plist

如果您决定使用我告诉您的程序,请确保将其设置为cocos2d

答案 1 :(得分:0)

请参阅代码Link

现在Cocos2dV3的变化低于。

在链接代码中,CCAnimation在V3中由CCActionAnimate替换,而CCRepeatForever在V3中由CCActionRepeatForever替换。

同时检查您的.plist图片可能 10 ,因为条件中包含第11个图片。所以可能是你在数组中插入图片的问题,

替换并尝试。

for(int i = 1; i < 11; ++i)
{
 // Code
}

改变它的工作正常。