如何在同一场景的单独图层中预加载游戏资源

时间:2012-04-12 21:41:51

标签: iphone objective-c ios cocos2d-iphone

对于我的Cocos2d游戏,我希望在主游戏开始之前加载所有资源(纹理图集和声音文件)。为此,我在主游戏场景中创建了一个图层,并将其称为preloadLayer,并将其作为最顶层添加到场景中。

preloadLayer由2个精灵组成,一个覆盖屏幕的上半部分,一个覆盖屏幕的下半部分。一旦所有资产都被加载,我希望两张精灵表移出屏幕以显示主游戏。

他的preloadlayer将加载以下内容:

  • 一个背景png图片
  • 一张精灵表png图片
  • 几个声音文件
  • 一个字体图集

问题是:

  • 实现这一目标的最佳方法是什么?
  • 如何告诉其他图层preloadlayer已完成加载。
  • 如何告诉preloadLayer所有内容都已加载,并且它可以在屏幕外消失以显示其他图层。

对于纹理图集我使用的是[CCSpriteFrameCache sharedSpriteFrameCache]和字体图集,我使用[CCLabelBMFont labelWithString:Str fntFile: file]加载它;

非常感谢你对此的帮助。

2 个答案:

答案 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取代了加载本身(但我猜这很明显)但我说它只是非常清楚