cocos2d-x項目過程記錄(紋理和內存優化方面)

1.參考資料Cocos2d-x紋理優化的一些方案  cocos2d-x如何優化內存的應用  iOS和android遊戲紋理優化和內存優化(cocos2d-x)html

2.加載貼圖集紋理android

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("xxx.plist");//系統將xxx.png文件和xxx.plist文件一同加載到內存緩存中,方便之後使用數組

 

CCSprite* sprite = CCSprite::createWithSpriteFrameName("image1.png");//系統尋找xxx.plist中的的image1.png的區域信息,在xxx.png中的這塊區域截取供使用緩存

注意:優化

1⃣這樣僅僅是打包了圖片,下降了遊戲資源的內存,可是不能下降渲染率,提升效率,還需CCSpriteBatchNode的幫助動畫

2⃣sprite->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("image2.png"));//切換圖片this

3⃣打包圖片並非將全部圖片都打包就是最好的,由於加載內存的時候,是將整張圖片都加載進來,若是該場景不會使用,就會形成內存浪費,因此依據遊戲邏輯或者場景來劃分打包範圍是最好的選擇。spa

4⃣(???????)其實紋理貼圖集是將其加載到緩存中,至於這塊內存的控制,如今尚未研究透徹,作個標記先.net

5⃣在未做貼圖時使用的sprite->getTextureRect().size 和 sprite->getContentSize()是同樣的,由於貼圖和內容均是一整塊圖片,而使用貼圖集後,前者是有像素的那部分,後者纔是資源文件的大小。htm

3.使用CCSpriteBatchNode

1⃣關於CCSpriteBatchNode和CCMenuItemSprite的使用問題

爲了使用batchNode的特性,因此將要添加MenuItem的selected和unselected精靈率先添加到了batchNode中,可是隨後的MenuItem仍然進行添加,因此出現了一個精靈兩個父節點的結果,這是不被容許的。 

2⃣動畫效果使用了CCSpriteFrameCache,在動畫播過一次後,總要清空SpriteFrame的數組和frameCache,以下

  sequence = NULL;

    //frameCache->removeSpriteFrames();//Error,在使用貼圖集加載其餘圖片以後,這句話就有問題了,由於會將全部的SpriteFrame從緩存中刪除,其餘再使用就沒有了 

  frameCache->removeSpriteFramesFromFile("animation.plist");//Right,動畫使用哪一個就刪除哪一個  

    frameArray->removeAllObjects();

    this->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("images.png"));

相關文章
相關標籤/搜索