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

相关文章
相关标签/搜索