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

时间:2022-11-21 05:10:41

原创作品,转载请标明:http://blog.csdn.net/jackystudio/article/details/12747385


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


1.概况

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

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

[cpp]  view plain copy
  1. //返回当前使用的纹理  
  2. virtual CCTexture2D* getTexture(void) = 0;  
  3.   
  4. //设置一个新的纹理,它会被retain  
  5. virtual void setTexture(CCTexture2D *texture) = 0;  


2.常用接口

2.1.初始化

[cpp]  view plain copy
  1. //初始化函数  
  2. virtual bool init(void);  
  3.   
  4. //用CCTexture2D纹理来初始化,精灵大小即是纹理大小  
  5. virtual bool initWithTexture(CCTexture2D *pTexture);  
  6.   
  7. ///用CCTexture2D纹理和大小来初始化  
  8. virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect);  
  9.   
  10. //用CCTexture2D纹理,大小,旋转来初始化  
  11. virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect, bool rotated);  
  12.   
  13. //用CCSpriteFrame精灵帧来初始化  
  14. virtual bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);  
  15.   
  16. //用CCSpriteFrame精灵帧名来初始化  
  17. virtual bool initWithSpriteFrameName(const char *pszSpriteFrameName);  
  18.   
  19. //用外部文件初始化,外部文件会先被创建为纹理,再用纹理初始化精灵  
  20. virtual bool initWithFile(const char *pszFilename);  
  21.   
  22. //用外部文件和大小来初始化  
  23. virtual bool initWithFile(const char *pszFilename, const CCRect& rect);  

2.2.继承自CCTextureProtocol

[cpp]  view plain copy
  1. //设置/获取纹理  
  2. virtual void setTexture(CCTexture2D *texture);  
  3. virtual CCTexture2D* getTexture(void);  
  4.   
  5. //设置/获取颜色描绘时混合方案  
  6. void setBlendFunc(ccBlendFunc blendFunc);  
  7. ccBlendFunc getBlendFunc(void);  

2.3.继承自CCNode

参见CCNode。

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

2.4.继承自CCNodeRGBA

[cpp]  view plain copy
  1. //设置颜色  
  2. virtual void setColor(const ccColor3B& color3);  
  3.   
  4. //传递颜色  
  5. virtual void updateDisplayedColor(const ccColor3B& parentColor);  
  6.   
  7. //设置透明度  
  8. virtual void setOpacity(GLubyte opacity);  
  9.   
  10. //设置/返回透明度是否跟随颜色值变化而变化  
  11. virtual void setOpacityModifyRGB(bool modify);  
  12. virtual bool isOpacityModifyRGB(void);  
  13.   
  14. //传递透明度  
  15. virtual void updateDisplayedOpacity(GLubyte parentOpacity);  

2.5.批节点

[cpp]  view plain copy
  1. //更新4属性:x,y,rotation,scale  
  2. virtual void updateTransform(void);  
  3.   
  4. //如果精灵是由批节点CCSpriteBatchNode渲染的,则返回批节点  
  5. virtual CCSpriteBatchNode* getBatchNode(void);  
  6. //设置批节点,不推荐使用  
  7. virtual void setBatchNode(CCSpriteBatchNode *pobSpriteBatchNode);  

2.6.纹理

[cpp]  view plain copy
  1. //设置纹理区域  
  2. virtual void setTextureRect(const CCRect& rect);  
  3. virtual void setTextureRect(const CCRect& rect, bool rotated, const CCSize& untrimmedSize);  
  4. virtual void setVertexRect(const CCRect& rect);  

2.7.精灵帧和动画

[cpp]  view plain copy
  1. //设置新的精灵帧  
  2. virtual void setDisplayFrame(CCSpriteFrame *pNewFrame);  
  3.   
  4. //返回精灵帧是否在使用  
  5. virtual bool isFrameDisplayed(CCSpriteFrame *pFrame);  
  6.   
  7. //返回当期使用精灵帧  
  8. virtual CCSpriteFrame* displayFrame(void);  
  9.   
  10. //设置动画和显示索引  
  11. virtual void setDisplayFrameWithAnimationName(const char *animationName, int frameIndex);  

2.8.Setter和Getter方法

设置/获取CCSprite属性。

[cpp]  view plain copy
  1. //设置获取是否更新  
  2. virtual bool isDirty(void);  
  3. virtual void setDirty(bool bDirty);  
  4.   
  5. //返回坐标、顶点、颜色信息  
  6. ccV3F_C4B_T2F_Quad getQuad(void);  
  7.   
  8. //返回纹理旋转  
  9. bool isTextureRectRotated(void);  
  10.   
  11. //返回/设置地图集索引  
  12. unsigned int getAtlasIndex(void);  
  13. void setAtlasIndex(unsigned int uAtlasIndex);  
  14.   
  15. //返回精灵区域,单位为点  
  16. const CCRect& getTextureRect(void);  
  17.   
  18. //如果采用批渲染,返回/设置纹理地图集  
  19. CCTextureAtlas* getTextureAtlas(void);  
  20. inline void setTextureAtlas(CCTextureAtlas *pobTextureAtlas);  
  21.   
  22. //获取偏移  
  23. const CCPoint& getOffsetPosition(void);  
  24.   
  25. //设置返回翻转  
  26. bool isFlipX(void);  
  27. void setFlipX(bool bFlipX);  
  28. bool isFlipY(void);  
  29. void setFlipY(bool bFlipY);