我有一个拥有许多独特单元的游戏,每个单元都有自己的精灵表(因为每个单元都有几个动画),这意味着游戏在任何给定的场景中可能会使用十几个精灵表。创建具有单位的场景时,所有这些资源的初始化需要花费大量时间(几秒钟)。具体来说,在运行此代码时,UI被锁定:
NSString *unitSheetName = [self getUnitSheetName];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:unitSheetName];
CCSprite *frame = [CCSprite spriteWithSpriteFrameName:kDefaultFrameName];
// etc...
但是,如果我然后pop
场景,然后创建同一场景的新版本(和push
它),加载只需要一小部分时间(UI不会锁定)。因此,似乎UI锁定是由于精灵表的初始缓存......
我希望通过在游戏启动时调用CCSpriteFrameCache
的{{1}}方法来避免这种延迟,但这似乎不起作用。尽管如此,初始负载仍然需要很长时间。
是否有任何好的,有效的预加载资产的方法?我不介意在我的启动加载屏幕上添加一两个,如果只是我可以确定在推送场景时以后不会锁定UI ...
答案 0 :(得分:1)
Per @ LearnCocos2D的回复,上面是如何正确和完全预加载精灵表,(fpSheet
是工作表的文件路径):
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:fpSheet];
NSDictionary *spriteSheet = [NSDictionary dictionaryWithContentsOfFile:fpSheet];
NSString *fnTexture = spriteSheet[@"metadata"][@"textureFileName"];
[[CCTextureCache sharedTextureCache] addImage:fnTexture];