1

我目前正在为 iPad 开发一款 cocos2d 游戏,在那款游戏中有很多动画。我以前使用 zwoptex 在我的项目中创建 spritesheet 和添加动画。

在我的游戏中有 10 个关卡,每个关卡完成后都会播放一个动画,每个关卡的动画都不同,动画图像大小与设备屏幕大小相同。所以我没有创建 spritesheet 文件,而是直接加载图像。我的问题是动画播放动画需要太多时间。

我该如何解决?请任何人指导我。是否可以在 plist 中加载全屏尺寸图像(1024x768),因为总共 10 个级别,每个级别有 20 帧动画,所以 10X20 = 200 个图像需要加载 spritesheet。

我正在将此代码用于动画

 CCAnimation *animation = [CCAnimation animation];
for(int i=1;i<=20;i++)
 {
  [animation addFrameWithFile:[NSString stringWithFormat:@"Level%dAni%d.png",level,i];
 }
 animation.delayPerUnit = 0.3f;
 animation.restoreOriginalFrame = YES;
 id action = [CCAnimate actionWithAnimation:animation];

我的问题是否可以使用 spritesheet 加载全屏动画?和动画加载时间不同,需要太多时间如何解决?

请帮我..

4

3 回答 3

1

通过使用 Cocos2D,您可以轻松地为精灵表图像制作动画。

使用 Cocos2D 尝试以下示例

http://www.smashious.com/cocos2d-sprite-sheet-tutorial-animating-a-flying-bird/309/ http://www.raywenderlich.com/1271/how-to-use-animations-and- cocos2d 中的精灵表

在不使用 Cocos2D 的情况下尝试以下示例

http://www.dalmob.org/2010/12/07/ios-sprite-animations-with-notifications/

http://developer.glitch.com/blog/2011/11/10/avatar-animations-in-ios/

于 2013-08-12T06:50:54.707 回答
1

使用 NSThread 并在此线程中加载您的动画。

NSThread *thread = [[[NSThread alloc] initWithTarget:self selector:@selector(preloadFireWorkAnimation) object:nil] autorelease];
    [thread start];

-(void)preloadFireWorkAnimation
 {
      // load your animation here;
 }
于 2013-08-12T10:21:26.220 回答
1

做数学计算,计算出 1024x768 像素的 200 张图片所需的内存量。任何 iSomething 设备的内存都太多了。

如果您有性能问题(例如,您是在设备上运行它吗?),那么您可以做两件事来提高图像加载速度:

  • 将您的图像转换为 .pvr.gz(我为此推荐 TexturePacker)。它们的加载速度明显快于 .png。
  • 使用 RGBA4444 像素格式(同样,您可以使用 TexturePacker 执行此操作),并在加载图像之前在 cocos 中设置纹理格式。图像会更小,占用更少的内存。

在你的代码中,你在哪里做动画

    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444];
    // load your images and do your anim
    ...
    // at the completion of the anim
    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];
于 2013-08-12T11:25:32.870 回答