游戏中通常需要将常用的资源如:声音,图片,plist文件,提前加载进内存,以加快游戏的流畅度
1.预加载声音:
SimpleAudioEngine::getInstance()->preloadBackgroundMusic("boom.mp3");
加载之后就可以直接播放:SimpleAudioEngine::getInstance()->playBackgroundMusic("boom.mp3");
2.预加载图片资源:
图片资源的加载分为同步加载和异步加载两种方式,通常我们采用异步加载的方式:
TextureCache::getInstance()->addImageAsync("boss.png", CC_CALLBACK_1(LoadingScene::ResourceCallBack,this));//ResourceCallBack是加载后调用的函数,可做统计用
加载到内存之后,我们就可以直接从内存读取,而不需要IO操作了:
从内存中读取已经加载的图片资源,有两种方法:
auto bg = Sprite::createWithTexture(TextureCache::getInstance()->getTextureForKey("groundLevel.jpg"));//前提是前面异步加载的图片资源必须加载完成了,成功了,因为异步加载只是执行了加载动作,是否加载成功,不得而知.
第二种方法:
auto bg = Sprite::createWithTexture(TextureCache::getInstance()->addImage("groundLevel.jpg"));//使用addImage()方法,最保险,如果该图片没有预先加载,则通过IO操作从磁盘中加载进内存,并返回一个Texture2D* 对象,如果前面已经加载过,在内存中存在了,则直接读取内存.
两种方法的比较:
追求速度:第一种方法读取,前提是一定要保证要读取的资源图片已经加载进内存
追求保险:第二种方法,无论是否加载过,都会获得正确的结果,但是要保证资源图片是存在的.
3.加载其他资源文件,如plist,通常是一些3D模型的文件,或者粒子特效的资源文件
FileUtils::getInstance()->getDataFromFile("debris.plist");//预加载3D模型的文件
FileUtils::getInstance()->getDataFromFile("vanishingPoint.plist");//预加载漫天繁星的粒子特效的plist文件
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("menu_scene.plist");//预加载打包的图片plist文件
(从已经加载的内存帧缓存中读取图片的方法:auto sprite=Sprite::createWithSpriteFrameName("mainmenu_BG.png");//前提是mainmenu_BG.png是已经通过plist或其他方法加载到了FrameCache中)