cocos2dx CCTextureCache 、CCSpriteBatchNode 、CCSpriteFrameCache区别

来源:互联网 发布:js获取a标签href 编辑:程序博客网 时间:2024/05/16 15:47

其实这些资料都来源于网络,把它整合一下 也方便自己记忆

CCTexture2D  通过图片 文本 和 数据生成OpenGL 2D纹理。 它是一个纹理贴图 都被缓存于CCTextureCache

CCTexture2D* cache =CCTextureCache::sharedTextureCache()->addImage("hero.png"); CCSprite* sprite =CCSprite::spriteWithTexture(cache); 

所以 CCTextureCache它相当于CCTexture2D的容器,是内存池,用来缓存CCTexture2D对象的,它内部有一个字典CCMutableDictionarym_pTextures,key为图片的名称,值是CCTexture2D。所以游戏内要避免名字相同的图片。

CCSpriteBatchNode

为了降低渲染批次而建立的一个专门管理精灵的类。它是批处理绘制精灵,主要是用来提高精灵的绘制效率的,需要绘制的精灵数量越多,效果越明显。限制:加入到cc.SpriteBatchNode中的cc.Sprite必须使用同一张纹理图

因为cocos2d-x采用opengles绘制图片的,opengles绘制每个精灵都会执行:open-draw-close流程。而CCSpriteBatchNode是把多个精灵放到一个纹理上,绘制的时候直接统一绘制该texture,不需要单独绘制子节点,这样opengles绘制的时候变成了:open-draw()-draw()…-draw()-close(),节省了多次open-close的时间。

CCSpriteBatchNode内部封装了一个CCTextureAtlas(纹理图集,它内部封装了一个CCTexture2D)和一个CCArray(用来存储CCSpriteBatchNode的子节点:单个精灵)。注意:因为绘制的时候只open-close一次,所以CCSpriteBatchNode对象的所有子节点都必须和它是用同一个texture(同一张图片):

CCTextureAtlas 纹理图集。它本身是保存一张大图的纹理和一个记录画大图某一区域的信息结构体的数组。TextureAtlas维护了一个V3F_C4B_T2F_Quad数组,使用一张texture进行batch render 其他与Texture2d没什么不同
CCTextureCache 包含CCTexture2D and CCTextureAtlas

CCSpriteFrameCache

它是管理CCSpriteFrame的内存池,跟CCTextureCache功能一样,不过跟CCTextureCache不同的是,如果内存池中不存在要查找的帧,它会提示找不到,而不会去本地加载图片。它的内部封装了一个字典:CCDictionary*m_pSpriteFrames,key为帧的名称。CCSpriteFrameCache一般用来处理plist文件(这个文件指定了每个独立的精灵在这张“大图”里面的位置和大小),该文件对应一张包含多个精灵的大图,plist文件可以使用TexturePacker制作。



0 0
原创粉丝点击