遊戲中通常需要將常用的資源如:聲音,圖片,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中)
原文:http://www.cnblogs.com/ttss/p/4136362.html
cocos2dx中圖片、聲音等緩存 釋放在cocos2dx開發時,別人建議在首個場景中將聲音資源(SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic等),圖片資源等最好提前加載好(CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile等),在以後的場景中可以直接調用。請問在替換場景後,這些資源沒有被釋放嗎?
緩存的資源是不會自動釋放的
但是你用緩存創建的精靈,動畫,會在replease之後釋放掉
轉場景的時候可以用
紋理:removeUnuseTexture
紋理:removeUnusedSpriteFrames
動畫:removeArmatureFileInfo
聲音:unloadEffect之類的方法在內存中釋放掉
可以用getTextureCache():getCachedTextureInfo()查看圖片的內存情況,返回值是string