转载自:

1 cocos2d-x中,精灵CCSprite是整个游戏开发处理的主要对象,例如天上的飞机、地上的坦克、玩家控制的任务等等都是精灵。甚至天上随机飘过的一朵白云、飞过的一只鸟也都是精灵。实际上,精灵就是一个可以不断变化的图片,变化包括位置变化、旋转、放大、运动等等。

2 可见,精灵在游戏中是十分重要的组成部分,随处可见。在cocos2d-x中,要用到图片展示的,基本上会使用到精灵类,CCSprite类在cocos2d-x中类结构图如下

1365415938_8385.jpg

3 为了能更清楚的了解精灵类,可以来学习下与精灵类相关的几个类

4 CCTexture2D 可以把它看成一个纹理,是cocos2d-x渲染图形的重要参数,用来贴图。因为cocos2d-x是使用OpenGL ES绘制2D图形的,它的尺寸是2N次方,使用方法如下

CCTexture2D *cache = CCTexture2D::sharedTextureCache() -> addImage(“hero.png”);

5 CCSprite精灵类,是CCNode的子类,CCSprite内部封装了CCTexture2D(纹理),初始化精灵对象的方法很多,可以参考/cocos2dx/sprite_nodes/CCSprite.h文件,常用的初始化精灵方法如下

(1) CCSprite *heroSprite = CCSPrite::create(“hero.png”);

(2) CCTexture2D *cache = CCTexture2D::sharedTextureCache() -> addImage(“hero.png”);

CCSprite *heroSprite = CCTexture2D::createWithTexture(cache);

6 CCTextureCache 相当与CCTexture2D的容器,是内存池,用来缓存CCTexture2D对象,CCTextureCache里面有一个字典CCDictionary* m_pTextures; 该字典中key是图片的名称,valueCCTexture2D。当CCTextureCache调用addImage函数,会先根据图片名称去内存中查找是否存在(和C++map类似),是则取出直接返回。

注意:当需要一次加载多张图片时,可以先把图片加载到CCTextureCache中,这样使用图片时的速度就会很快了

7 CCSpriteBatchNode 批处理绘制精灵类,主要用来提高精灵的绘制效率,当需要绘制的精灵数量越多时,效果越明显。cocos2d-x采用OpenGL ES绘制图片的,OpenGL ES绘制每个精灵时,都会执行open – draw – close流程。而CCSpriteBatchNode是把多个精灵放到一个纹理上,绘制时直接绘制该texture,不需要单独绘制子节点,这样OpengGL ES的绘制流程就成了open – draw – draw - … - draw – draw – close,所以节省了多次openclose的时间。CCSpriteBatchNode 内部封装了一个CCTextureAtlas(纹理图集,它内部封装了一个CCTexture2D)和一个CCArray(用来存储CCSpriteBatchNode的子节点:单个精灵)

注意:因为绘制的时候只open – close一次,所以CCSpriteBatchNode对象的所有子节点必须和它是用同一个texture(纹理)

8 CCSpriteFrameCache 管理CCSpriteFrame的内存池,它跟CCTextureCache功能一样,不过和CCTextureCache不同的是,如果内存中不存在要查找的帧,它会提示找不到,而不会去本地加载图片