[cocos2d-x] --- CCSprite類詳解

轉載自:http://blog.csdn.net/qiurisuixiang/article/details/8773787


1 cocos2d-x中,精靈CCSprite是整個遊戲開發處理的主要對象,例如天上的飛機、地上的坦克、玩家控制的任務等等都是精靈。甚至天上隨機飄過的一朵白雲、飛過的一隻鳥也都是精靈。實際上,精靈就是一個可以不斷變化的圖片,變化包括位置變化、旋轉、放大、運動等等。

2 可見,精靈在遊戲中是十分重要的組成部分,隨處可見。在cocos2d-x中,要用到圖片展示的,基本上會使用到精靈類,CCSprite類在cocos2d-x中類結構圖如下

1365415938_8385.jpg


3 爲了能更清楚的瞭解精靈類,可以來學習下與精靈類相關的幾個類

4 CCTexture2D 可以把它看成一個紋理,是cocos2d-x渲染圖形的重要參數,用來貼圖。因爲cocos2d-x是使用OpenGL ES繪製2D圖形的,它的尺寸是2N次方,使用方法如下

CCTexture2D *cache = CCTexture2D::sharedTextureCache() -> addImage(“hero.png”);

5 CCSprite精靈類,是CCNode的子類,CCSprite內部封裝了CCTexture2D(紋理),初始化精靈對象的方法很多,可以參考/cocos2dx/sprite_nodes/CCSprite.h文件,常用的初始化精靈方法如下

(1) CCSprite *heroSprite = CCSPrite::create(“hero.png”);

(2) CCTexture2D *cache = CCTexture2D::sharedTextureCache() -> addImage(“hero.png”);

CCSprite *heroSprite = CCTexture2D::createWithTexture(cache);

6 CCTextureCache 相當與CCTexture2D的容器,是內存池,用來緩存CCTexture2D對象,CCTextureCache裏面有一個字典CCDictionary* m_pTextures; 該字典中key是圖片的名稱,valueCCTexture2D。當CCTextureCache調用addImage函數,會先根據圖片名稱去內存中查找是否存在(和C++map類似),是則取出直接返回。

注意:當需要一次加載多張圖片時,可以先把圖片加載到CCTextureCache中,這樣使用圖片時的速度就會很快了

7 CCSpriteBatchNode 批處理繪製精靈類,主要用來提高精靈的繪製效率,當需要繪製的精靈數量越多時,效果越明顯。cocos2d-x採用OpenGL ES繪製圖片的,OpenGL ES繪製每個精靈時,都會執行open – draw – close流程。而CCSpriteBatchNode是把多個精靈放到一個紋理上,繪製時直接繪製該texture,不需要單獨繪製子節點,這樣OpengGL ES的繪製流程就成了open – draw – draw - … - draw – draw – close,所以節省了多次openclose的時間。CCSpriteBatchNode 內部封裝了一個CCTextureAtlas(紋理圖集,它內部封裝了一個CCTexture2D)和一個CCArray(用來存儲CCSpriteBatchNode的子節點:單個精靈)

注意:因爲繪製的時候只open – close一次,所以CCSpriteBatchNode對象的所有子節點必須和它是用同一個texture(紋理)

8 CCSpriteFrameCache 管理CCSpriteFrame的內存池,它跟CCTextureCache功能一樣,不過和CCTextureCache不同的是,如果內存中不存在要查找的幀,它會提示找不到,而不會去本地加載圖片




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