cocos2dx中載入圖片資源的方法,和從記憶體中獲取已經載入的圖片資源的方法 以及釋放問題
遊戲中通常需要將常用的資源如:聲音,圖片,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"));//使用
兩種方法的比較:
追求速度:第一種方法讀取,前提是一定要保證要讀取的資源圖片已經載入進記憶體
追求保險:第二種方法,無論是否載入過,都會獲得正確的結果,但是要保證資源圖片是存在的.
3.載入其他資原始檔,如plist,通常是一些3D模型的檔案,或者粒子特效的資原始檔
FileUtils::getInstance()->getDataFromFile("debris.plist");//預載入3D模型的檔案
FileUtils::getInstance()->getDataFromFile("vanishingPoint.plist");//預載入漫天繁星的粒子特效的
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("menu_scene.plist");//預載入打包的圖片plist檔案
(從已經載入的記憶體幀快取中讀取圖片的方法:auto sprite=Sprite::createWithSpriteFrameName("mainmenu_BG.png");//前提是mainmenu_BG.png是已經通過plist或其他方法載入到了FrameCache中)
cocos2dx中圖片、聲音等快取 釋放在cocos2dx開發時,別人建議在首個場景中將聲音資源(SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic等),圖片資源等最好提前載入好(CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile等),在以後的場景中可以直接呼叫。請問在替換場景後,這些資源沒有被釋放嗎?
快取的資源是不會自動釋放的
但是你用快取建立的精靈,動畫,會在replease之後釋放掉
轉場景的時候可以用
紋理:removeUnuseTexture
紋理:removeUnusedSpriteFrames
動畫:removeArmatureFileInfo
聲音:unloadEffect之類的方法在記憶體中釋放掉
可以用getTextureCache():getCachedTextureInfo()檢視圖片的記憶體情況,返回值是string