【问题标题】:cocos2d v3 Sprite animation issuecocos2d v3 Sprite 动画问题
【发布时间】:2014-05-12 19:49:26
【问题描述】:

Sprite 动画问题。

使用这个似乎对其他人有用的例子: 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:]:对象不能为 nil'

显然错误消息是说我的图像文件是 nil,但它看起来非常好。

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

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

我尝试将资源文件夹中的图像移动到下一级,但仍然出现错误。

它们的命名似乎很好。

还有什么要检查的想法吗?

【问题讨论】:

  • 我刚刚在它填充数组之前添加了一个 NSLog:NSLog(@"discoball1200x2008c16-%d.png:",1); 并且调试输出“discoball1200x2008c16-1.png”,这完全是我的第一个图像的文件名。
  • 做到了这一点:[ballAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"discoball1200x2008c16-%d.png", 1]]]; 但仍然得到相同的错误,即 insertObject 为 nil ... ?!?!?!
  • 刚刚尝试了我在游戏另一部分中使用的图像,该图像在尝试填充相关数组之前加载(即图像在游戏中显示良好)。该图像在游戏的早期部分显示良好,但当我尝试将其放入数组时声称为零。这似乎表明实际数组为零,但它的初始化方式看起来不错,是吗?
  • 您是否将精灵表添加到场景中?
  • 我认为我不需要。根据我在 cmets 中提到的各种尝试,这似乎不太可能成为问题。我的假设完全错了吗?

标签: cocos2d-iphone ccsprite


【解决方案1】:

制作一个精灵表,将其添加到您的 int 中

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

现在在动画代码中

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

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

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

【讨论】:

【解决方案2】:

查看代码Link

现在 Cocos2dV3 的变化如下。

在链接代码中,CCAnimation 在 V3 中被 CCActionAnimate 替换,在 V3 中 CCRepeatForeverCCActionRepeatForever 替换。

同时检查您的 .plist 图像可能是 10 的条件,以确保其中有 第 11 个 图像。所以可能是你在数组中插入图像的问题,

更换并尝试。

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

改一下就好了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2017-05-16
    相关资源
    最近更新 更多