Cocos2d-x緩存機制(一)


Cocos2d-x引擎提供3個緩存類,都是全局單例模式。
 
CCTextureCache
首先是最底層也是最有效的紋理緩存CCTextureCache,這里緩存的是加載到內存中的紋理資源,也就是圖片資源。其原理是對加入緩存的紋理資源進行一次引用,使其引用計數加1,保持不被清除,而Cocos2d-x的渲染機制是可以重復使用同一份紋理在不同場合中進行渲染,從而達到重復使用,降低內存和GPU運算資源的開銷的目的。常用以下三個接口:
1     static CCTextureCache* sharedTextureCache();    //返回紋理緩存的全局單例
2     CCTexture2D* addImage(const char* fileimage);     //添加一張紋理圖片到緩存中
3     void removeUnusedTextures();    //清除不使用的紋理

 

在這3個接口中,CCTextureCache屏蔽了加載紋理的許多細節;addImage函數會返回一個紋理CCTextrue2D的引用,可能是新加載到內存的,也可能是之前已經存在的;而removeUnusedTextures則會釋放當前所有引用計數為1的紋理,即目前沒有被使用的紋理。
 
CCSpriteFrameCache
第二個則是精靈幀框緩存。它主要服務於多張碎圖合並出來的紋理圖片。這種紋理在一張大圖中包含了多張小圖,直接通過CCTextureCache引用會有諸多不便,因而衍生出來精靈幀框的處理方式,即把截取好的紋理信息保存在一個精靈幀框內,精靈通過切換不同的框幀來顯示不同的圖案。
 
CCAnimationCache
最后一個是動畫緩存。通常情況下,對於一個精靈動畫,每次創建時都需要加載精靈幀,按順序添加到數組,再創建對應動作類,這是一個非常繁瑣的計算過程。對於使用頻率較高的動畫,將其加入緩存可以有效降低每次創建的巨大消耗。常用接口如下:
1     static CCAnimationCache* sharedAnimationCache(void);    //全局共享的緩存單例
2     void addAnimation(CCAnimation* animation, const char* name);    //添加一個動畫到緩存
3     void removeAnimationByName(const char* name);    //移除一個指定的動畫
4     CCAnimation* animationByName(const char* name);    //獲得事先存入的動畫

 

動畫緩存和上面兩個緩存不同的是,動畫緩存需要手動維護全部動畫信息。如果考慮到兩個場景間使用的動畫基本不會重復,可以直接清理整個動畫緩存。如下操作所示:
1     void releaseCaches()
2     {
3     CCAnimationCache::purgeSharedAnimationCache();
4     CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrame();
5     CCTextureCache::sharedTextureCache()->removeUnusedTextures();
6     //清理順序,應該先清理動畫緩存,然后清理精靈幀,最后清理紋理。按照引用層級由高到低,以保證釋放引用有效
7     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM