1

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

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

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

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

我希望我能够通过在游戏启动时调用CCSpriteFrameCache'addSpriteFramesWithFile方法来避免这种滞后,但这似乎不起作用。尽管如此,初始加载仍然需要很长时间。

有没有什么好的、有效的方法来预加载资产?我不介意在我的启动加载屏幕上添加一两秒,只要我能确定 UI 稍后在场景被推送时不会被锁定......

4

1 回答 1

1

根据上面@LearnCocos2D 的回复,这里是正确和完全预加载精灵表的方法,(fpSheet是表的文件​​路径):

  [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:fpSheet];

  NSDictionary *spriteSheet = [NSDictionary dictionaryWithContentsOfFile:fpSheet];
  NSString *fnTexture = spriteSheet[@"metadata"][@"textureFileName"];
  [[CCTextureCache sharedTextureCache] addImage:fnTexture];
于 2013-11-08T04:36:34.493 回答