Cocos2d-x 纹理缓存(Texture Cache)
2016-07-14 15:08
561 查看
简介
纹理缓存是将纹理缓存起来方便之后的绘制工作。每一个缓存的图像的大小,颜色和区域范围都是可以被修改的。这些信息都是存储在内存中的,不用在每一次绘制的时候都发送给GPU。CCTextureCache
当你创建一个精灵,你一般会使用CCSprite::create(pszFileName)。假如你去看CCSprite::create(pszFileName)的实现方式,你将看到它将这个图片增加到纹理缓存中去了:bool CCSprite::initWithFile(const char *pszFilename) { CCAssert(pszFilename != NULL, "Invalid filename for sprite"); CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename); if (pTexture) { CCRect rect = CCRectZero; rect.size = pTexture->getContentSize(); return initWithTexture(pTexture, rect); } // don't release here. // when load texture failed, it's better to get a "transparent" sprite than a crashed program // this->release(); returnfalse; }
上面代码显示一个单例在控制加载纹理。一旦这个纹理被加载了,在下一时刻就会返回之前加载的纹理引用,并且减少加载的时候瞬间增加的内存。
CCSpriteFrameCache
CCSpriteFrameCache单例是所有精灵帧的缓存。使用spritesheet和与之相关的xml文件,我们可以加载很多的精灵帧到缓存中,那么之后我们就可以从这个缓存中创建精灵对象了。和这个xml相关的纹理集一般是一个很大的图片,里面包含了很多小的纹理。下面就是一个纹理集的例子:
有三种方式来加载纹理集到CCSpriteFrameCache中:
加载一个xml(plist)文件
加载一个xml(plist)文件和一个纹理集
通过CCSpriteFrame和一个精灵帧的名字
具体完整API请看CCSpriteFrameCache API。
示例:
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache(); cache->addSpriteFramesWithFile(“family.plist”, “family.png”);
CCSpriteBatchNode
CCSpriteBatchNode渲染所有的子节点只需要一次,只需要调用一次draw。那就是为什么你需要把精灵加载batch node的原因,因为可以统一一起渲染。但是只有这个精灵使用的纹理包含在batch node中的才可以添加到batch node上,因为batch node一次只渲染这相同的纹理集。相关文章推荐
- Cocos2d-x 内存管理——引用计数
- Cocos2d-x 声音和音效
- 001-Cocos2dx-2.1.3环境搭建-windows
- cocos Eclipse 打包。问题记录==
- 【步兵 cocos2dx】图片管理 之 什么时候打pvr.ccz
- Cocos2d-x 图像渲染和动画——裁剪(ClippingNode)
- Cocos2d-x 图像渲染和动画——粒子系统
- Cocos2d-x 图像渲染和动画——场景转换(Transitions)
- Cocos2d-x 图像渲染和动画——序列帧动画
- cocos2dx spine之二 :spine变色
- Cocos2d-x 图像渲染和动画——动作
- Cocos2d-x 图像渲染和动画——3.0坐标系详解
- Cocos2d-x 基础概念——调度器(scheduler)
- Cocos2d-x 基础概念——导演、场景、层、精灵
- Cocos2d-x 综述——API 风格
- cocos2dx spine之一 :spine缓存 (c++ & lua)
- 使用TexturePacker生成png和plist,在Cocos2dx中使用plist和png
- Cocos Creator 控制面板
- Cocos Creator 介绍
- cocos2d-x怎么实现跨平台 记录