使用cocos2d预加载Sprite表

时间:2013-11-08 02:54:33

标签: ios iphone cocos2d-iphone

我有一个拥有许多独特单元的游戏,每个单元都有自己的精灵表(因为每个单元都有几个动画),这意味着游戏在任何给定的场景中可能会使用十几个精灵表。创建具有单位的场景时,所有这些资源的初始化需要花费大量时间(几秒钟)。具体来说,在运行此代码时,UI被锁定:

  NSString *unitSheetName = [self getUnitSheetName];
  [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:unitSheetName];

  CCSprite *frame = [CCSprite spriteWithSpriteFrameName:kDefaultFrameName];
  // etc...

但是,如果我然后pop场景,然后创建同一场景的新版本(和push它),加载只需要一小部分时间(UI不会锁定)。因此,似乎UI锁定是由于精灵表的初始缓存......

我希望通过在游戏启动时调用CCSpriteFrameCache的{​​{1}}方法来避免这种延迟,但这似乎不起作用。尽管如此,初始负载仍然需要很长时间。

是否有任何好的,有效的预加载资产的方法?我不介意在我的启动加载屏幕上添加一两个,如果只是我可以确定在推送场景时以后不会锁定UI ...

1 个答案:

答案 0 :(得分:1)

Per @ LearnCocos2D的回复,上面是如何正确和完全预加载精灵表,(fpSheet是工作表的文件路径):

  [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:fpSheet];

  NSDictionary *spriteSheet = [NSDictionary dictionaryWithContentsOfFile:fpSheet];
  NSString *fnTexture = spriteSheet[@"metadata"][@"textureFileName"];
  [[CCTextureCache sharedTextureCache] addImage:fnTexture];