一、纹理缓存、帧缓存、动画缓存
缓存机制:存储设施有快慢之分,PC机上有硬盘与内存之分,计算机软件运行时候把资源加载到内存中运行;手机与PC也是类似的。当手机软件运行时候,把经常需要用到的资源预先加载到存取速度快的内存中,之后访问该资源将会节省大量时间。
Cocos2d-x为我们提供了三个实现缓存的接口,有纹理缓存、帧缓存、动画缓存,都是全局单例。
纹理缓存(CCTextureCache):
纹理缓存缓存加载到内存中的纹理资源,纹理是OpenGL中对图片的叫法,将纹理缓存起来方便之后的绘制工作。
每一个缓存的图像的大小,颜色和区域范围都是可以被修改的。这些信息都是存储在内存中的,不用在每一次绘制的时候都发送给GPU。
原理:对加入缓存的纹理资源进行一次引用,使其引用计数加一,保持不被清楚,从而使Cocos2d-x的渲染机制可以重复使用同一纹理多次渲染。
CCTextureCache的继承关系:class CC_DLL CCTextureCache : public CCObject。
CCTextureCache.h中部分代码如下:
上面代码都有英文注释,简单易懂,下面解释一些常用的。
sharedTextureCache:得到CCTextureCache的单例对象。
purgeSharedTextureCache:清空缓存,销毁CCTextureCache单例对象。
addImage:加载一个图片生成纹理,返回生成的纹理指针。
removeAllTextures:释放所有纹理。
removeUnusedTextures:清除未被外部使用的纹理。怎么知道未使用呢里只需要遍历下计数器值为1的纹理即未被外部使用的纹理进行释放即可。 新场景创建好后,使用此方法释放没有使用的纹理非常方便。
removeTexture:移除指定的纹理。
再来看看下面代码:
由此可知,当创建一个精灵时候,实际上是通过纹理缓存创建的。
精灵帧缓存(CCSpriteFrameCache):
CCSpriteFrameCache也是一个单例对象,使用xml格式文件(plist文件)。
我们可以加载很多的精灵帧到缓存中,之后就可以从这个缓存中创建精灵对象了。
精灵帧缓存主要用来缓存多张小图合并后的图片,一张图中包含多张小图,通过CCSpriteFrameCache缓存后通过CCSpriteFrame引用其中一个小图片。
继承关系:class CC_DLL CCSpriteFrameCache : public CCObject。
CCSpriteFrameCache.h部分代码如下:
void addSpriteFramesWithFile(const char *pszPlist):从一个.plist文件添加多个精灵帧。 一个纹理将被自动加载。纹理名称将把.plist后缀名替换为.png来组成。
void addSpriteFramesWithFile(const char* plist, const char* textureFileName):通过一个.plist文件添加多个精灵帧。纹理将与被创建的精灵帧结合。
void addSpriteFramesWithFile(const char *pszPlist, CCTexture2D *pobTexture):通过一个.plist文件添加多个精灵帧。纹理将与被创建的精灵帧结合。
void addSpriteFrame(CCSpriteFrame *pobFrame, const char *pszFrameName):通过给定的名称添加一个精灵帧。 如果名称已经存在,那么原来名称的内容将被新的所替代。
二、精灵的创建
精灵的创建:
精灵是游戏中主要的元素,创建的方式有很多种,通过纹理创建,通过精灵帧创建等。
精灵的继承关系:class CC_DLL CCSprite : public CCNodeRGBA, public CCTextureProtocol
精灵的部分代码如下:
光看上面代码就知道它们是创建和初始化精灵的函数。有许多种方法可以创建一个精灵。
创建精灵方式如下图所示:

提示:系统默认的图片路径是工程下面Resources,如果是其下有更深层次的目录。需要手动添加。
第一种:利用图片直接创建精灵
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!