上一节说布景层CCLayer是小容器,那么精灵类CCSprite就是容器添加的内容,它是构成游戏的主要元素。精灵这个名称应该是游戏专用,它表示游戏中玩家操作的主角、敌人、NPC(Non Player Character-非玩家控制角色的缩写)、背景、道具和机关等。在Cocos2D-x中,CCSprite本质上就是一张二维的图片对象而已。CCSprite的继承关系图如下:
从上图可知,CCSPrite也是CCNode的子类,不过它还支持纹理和色彩。看一看CCSprite的内部结构和功能。
·CCSprite属性:
GLubyte m_nOpacity:不透明度
ccColor3B m_sColor:颜色
CCTextureAtlas* m_pobTextureAtlas:地图集
unsigned int m_uAtlasIndex:图片集索引
CCSpriteBatchNode* m_pobBatchNode:精灵集
bool m_bDirty:是否需要更新
bool m_bRecursiveDirty:是否需要递归的更新
bool m_bHasChildren:是否有子节点
bool m_bShouldBeHidden:是否被隐藏
CCAffineTransform m_transformToBatch:2D仿射变换
ccBlendFunc m_sBlendFunc:是否混合方法
CTexture2D* m_pobTexture:纹理
CCRect m_obRect:矩形
bool m_bRectRotated:矩形是否旋转
CCPoint m_obOffsetPosition:偏移位置
CCPoint m_obUnflippedOffsetPositionFromCenter:从中心位置的非平移偏移
ccV3F_C4B_T2F_Quad m_sQuad:集合三维顶点坐标、纹理和RGBA颜色的点
ccColor3B m_sColorUnmodified:原始颜色
bool m_bOpacityModifyRGB:是否不透明
bool m_bFlipX:是否x轴翻转
bool m_bFlipY:是否y轴翻转
·CCSprite方法:
//初始化精灵
bool initWithFile(const char *pszFilename):初始化精灵(通过图片地址)
bool initWithFile(const char *pszFilename, const CCRect& rect):初始化精灵(通过图片地址和矩形)
bool initWithSpriteFrameName(const char *pszSpriteFrameName):初始化精灵(通过精灵帧名称)
bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame):初始化精灵(通过精灵帧)
bool initWithTexture(CCTexture2D *pTexture):初始化精灵(通过纹理)
bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect):初始化精灵(通过纹理和矩形)
bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect, bool rotated):初始化精灵(通过纹理、矩形和旋转)
//创建精灵
static CCSprite* spriteWithFile(const char *pszFileName):创建精灵(通过图片)
static CCSprite* spriteWithFile(const char *pszFileName, const CCRect& rect):创建精灵(通过图片和矩形)
static CCSprite* spriteWithTexture(CCTexture2D *pTexture):创建精灵(通过纹理)
static CCSprite* spriteWithTexture(CCTexture2D *pTexture, const CCRect& rect):创建精灵(通过纹理和矩形)
static CCSprite* spriteWithSpriteFrame(CCSpriteFrame *pSpriteFrame):创建精灵(通过精灵帧)
static CCSprite* spriteWithSpriteFrameName(const char *pszSpriteFrameName):创建精灵(通过精灵帧名称)
static CCSprite* createWithTexture(CCTexture2D *pTexture):创建精灵(通过纹理)
static CCSprite* createWithTexture(CCTexture2D *pTexture, const CCRect& rect):创建精灵(通过纹理和矩形)
static CCSprite* createWithSpriteFrame(CCSpriteFrame *pSpriteFrame):创建精灵(通过精灵帧)
static CCSprite* createWithSpriteFrameName(const char *pszSpriteFrameName):创建精灵(通过精灵帧名称)
static CCSprite* create(const char *pszFileName):创建精灵(通过图片)
static CCSprite* create(const char *pszFileName, const CCRect& rect):创建精灵(通过图片和矩形)
static CCSprite* create():创建精灵
void draw(void):绘制
CCSpriteBatchNode* getSpriteBatchNode(void):获取精灵集
void setTexture(CCTexture2D *texture):设置纹理
void setDisplayFrameWithAnimationName(const char *animationName, int frameIndex):设置动画和帧索引
void setBatchNode(CCSpriteBatchNode *pobSpriteBatchNode):设置精灵集
以上就是CCSprite主要的属性和方法。可以看出,有大量的创建和初始化方法用于获得CCSprite对象。这是因为CCSprite是游戏的主要元素,角色、NPC、道具、背景等都需要大量使用CCSprite对象。灵活的获取CCSprite对象方式,可以让Cocos2D-x引擎具有更好的兼容性。
在创建和初始化CCSprite方法中出现贴图类CCTexture2D。这个类是关于OpenGL的概念,在OpenGL中称图片为贴图,在Cocos2D-x中CCTexture2D就是图片对象的意思,可以通过它创建CCSprite对象。可以把它看成一个纹理,它是Cocos2D-x渲染图形的重要参数。
在CCSprite属性中有精灵批处理类CCSpriteBatchNode。这个类的作用是提高CCSprite的渲染效率。如果当有大量CCSprite对象需要渲染,逐个渲染效率会很低,通过使用CCSpriteBatchNode来批处理这些CCSprite对象,就可以做到一次渲染即可。它也可以作为如同CCLayerMultiplex的作用,用于管理多个CCSPrite。
在创建和初始化CCSprite方法中出现精灵帧类CCSpriteFrame。精灵帧的概念是相对于动画而产生的。一个精灵是固定的节点,它可以拥有许多精灵帧,在它们之间切换就形成动画效果。关于CCSpriteFrame在特性动画中还会详细讲解,这里只简单介绍一下。