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"));//使用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 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章