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"));