对于我的Cocos2d游戏,我希望在主游戏开始之前加载所有资源(纹理图集和声音文件)。为此,我在主游戏场景中创建了一个图层,并将其称为preloadLayer,并将其作为最顶层添加到场景中。
preloadLayer由2个精灵组成,一个覆盖屏幕的上半部分,一个覆盖屏幕的下半部分。一旦所有资产都被加载,我希望两张精灵表移出屏幕以显示主游戏。
他的preloadlayer将加载以下内容:
问题是:
对于纹理图集我使用的是[CCSpriteFrameCache sharedSpriteFrameCache]
和字体图集,我使用[CCLabelBMFont labelWithString:Str fntFile: file]
加载它;
非常感谢你对此的帮助。
答案 0 :(得分:3)
您可以使用回调异步将图像预加载到缓存中。
[[CCTextureCache sharedTextureCache] addImageAsync:imagePath target:self selector:@selector(imageLoaded:)];
回调的签名:
-(void)imageLoaded:(CCTexture2D*)texture;
配置回调,以便了解最后一张图片是否已加载。请记住,如果以这种方式启动多个图像加载,它们可能无法按照它们的启动顺序完成。
答案 1 :(得分:1)
像这样使用CCTextureCache
:
[[CCTextureCache sharedTextureCache] addImage:@"myImageName"];
和声音:
[[SimpleAudioEngine sharedEngine]preloadBackgroundMusic:@"myMusicFile"];
// or
[[SimpleAudioEngine sharedEngine]preloadEffect:@"myEffectSoundFile"];
效果用于小文件,大文件的背景音乐经常循环
最简单的方法......它在内存管理方面非常棒(当你收到1级内存警告时,它会自行释放)
查看类引用以获取更多方法和详细信息
编辑:
只需执行以下操作:
if([[CCTextureCache sharedTextureCache] addImage:@"myImageName"]) {
//image loaded
}
我忘了说的是,如果你使用的话,如果你不需要做另一个,那么if取代了加载本身(但我猜这很明显)但我说它只是非常清楚