【玩转cocos2d-x之八】精灵类CCSprite

精灵类CCSprite可以说是游戏的主角了,也是我们平时最常用到的类。

概况



CCSprite本质上就是一个二维图片,是静态的。游戏中的动画只不过是让一张张静态图片快速更换达到的动态效果。CCSprite继承于CCNodeRGBA,并实现了CCTextureProtocol的接口。因此CCNodeRGBA所具有的RGB和透明值这些属性和接口CCSprite都有,而CCTextureProtocol是一个抽象类,定义了和纹理相关的两个标准接口:

1
2
3
4
5
//返回当前使用的纹理  
virtual CCTexture2D* getTexture(void) = 0;

//设置一个新的纹理,它会被retain
virtual void setTexture(CCTexture2D *texture) = 0;

常用接口

初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//初始化函数  
virtual bool init(void);

//用CCTexture2D纹理来初始化,精灵大小即是纹理大小
virtual bool initWithTexture(CCTexture2D *pTexture);

///用CCTexture2D纹理和大小来初始化
virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect);

//用CCTexture2D纹理,大小,旋转来初始化
virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect, bool rotated);

//用CCSpriteFrame精灵帧来初始化
virtual bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);

//用CCSpriteFrame精灵帧名来初始化
virtual bool initWithSpriteFrameName(const char *pszSpriteFrameName);

//用外部文件初始化,外部文件会先被创建为纹理,再用纹理初始化精灵
virtual bool initWithFile(const char *pszFilename);

//用外部文件和大小来初始化
virtual bool initWithFile(const char *pszFilename, const CCRect& rect);

继承自CCTextureProtocol

1
2
3
4
5
6
7
//设置/获取纹理  
virtual void setTexture(CCTexture2D *texture);
virtual CCTexture2D* getTexture(void);

//设置/获取颜色描绘时混合方案
void setBlendFunc(ccBlendFunc blendFunc);
ccBlendFunc getBlendFunc(void);

继承自CCNode

参见CCNode。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
virtual void setScaleX(float fScaleX);  
virtual void setScaleY(float fScaleY);
virtual void setPosition(const CCPoint& pos);
virtual void setRotation(float fRotation);
virtual void setRotationX(float fRotationX);
virtual void setRotationY(float fRotationY);
virtual void setSkewX(float sx);
virtual void setSkewY(float sy);
virtual void removeChild(CCNode* pChild, bool bCleanup);
virtual void removeAllChildrenWithCleanup(bool bCleanup);
virtual void reorderChild(CCNode *pChild, int zOrder);
virtual void addChild(CCNode *pChild);
virtual void addChild(CCNode *pChild, int zOrder);
virtual void addChild(CCNode *pChild, int zOrder, int tag);
virtual void sortAllChildren();
virtual void setScale(float fScale);
virtual void setVertexZ(float fVertexZ);
virtual void setAnchorPoint(const CCPoint& anchor);//默认(0.5,0.5)
virtual void ignoreAnchorPointForPosition(bool value);
virtual void setVisible(bool bVisible);
virtual void draw(void);

继承自CCNodeRGBA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//设置颜色  
virtual void setColor(const ccColor3B& color3);

//传递颜色
virtual void updateDisplayedColor(const ccColor3B& parentColor);

//设置透明度
virtual void setOpacity(GLubyte opacity);

//设置/返回透明度是否跟随颜色值变化而变化
virtual void setOpacityModifyRGB(bool modify);
virtual bool isOpacityModifyRGB(void);

//传递透明度
virtual void updateDisplayedOpacity(GLubyte parentOpacity);

批节点

1
2
3
4
5
6
7
//更新4属性:x,y,rotation,scale  
virtual void updateTransform(void);

//如果精灵是由批节点CCSpriteBatchNode渲染的,则返回批节点
virtual CCSpriteBatchNode* getBatchNode(void);
//设置批节点,不推荐使用
virtual void setBatchNode(CCSpriteBatchNode *pobSpriteBatchNode);

纹理

1
2
3
4
//设置纹理区域  
virtual void setTextureRect(const CCRect& rect);
virtual void setTextureRect(const CCRect& rect, bool rotated, const CCSize& untrimmedSize);
virtual void setVertexRect(const CCRect& rect);

精灵帧和动画

1
2
3
4
5
6
7
8
9
10
11
//设置新的精灵帧  
virtual void setDisplayFrame(CCSpriteFrame *pNewFrame);

//返回精灵帧是否在使用
virtual bool isFrameDisplayed(CCSpriteFrame *pFrame);

//返回当期使用精灵帧
virtual CCSpriteFrame* displayFrame(void);

//设置动画和显示索引
virtual void setDisplayFrameWithAnimationName(const char *animationName, int frameIndex);

Setter和Getter方法

设置/获取CCSprite属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//设置获取是否更新  
virtual bool isDirty(void);
virtual void setDirty(bool bDirty);

//返回坐标、顶点、颜色信息
ccV3F_C4B_T2F_Quad getQuad(void);

//返回纹理旋转
bool isTextureRectRotated(void);

//返回/设置地图集索引
unsigned int getAtlasIndex(void);
void setAtlasIndex(unsigned int uAtlasIndex);

//返回精灵区域,单位为点
const CCRect& getTextureRect(void);

//如果采用批渲染,返回/设置纹理地图集
CCTextureAtlas* getTextureAtlas(void);
inline void setTextureAtlas(CCTextureAtlas *pobTextureAtlas);

//获取偏移
const CCPoint& getOffsetPosition(void);

//设置返回翻转
bool isFlipX(void);
void setFlipX(bool bFlipX);
bool isFlipY(void);
void setFlipY(bool bFlipY);
文章目录
  1. 1. 概况
  2. 2. 常用接口
    1. 2.1. 初始化
    2. 2.2. 继承自CCTextureProtocol
    3. 2.3. 继承自CCNode
    4. 2.4. 继承自CCNodeRGBA
    5. 2.5. 批节点
    6. 2.6. 纹理
    7. 2.7. 精灵帧和动画
    8. 2.8. Setter和Getter方法
,