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