在cocos2d-x中,精灵CCSprite是整个游戏开发处理的主要对象,例如天上的飞机、地上的坦克、玩家控制的任务等等都是精灵。甚至天上随机飘过的一朵白云、飞过的一只鸟也都是精灵。实际上,精灵就是一个可以不断变化的图片,变化包括位置变化、旋转、放大、运动等等。
可见,精灵在游戏中是十分重要的组成部分,随处可见。在cocos2d-x中,要用到图片展示的,基本上会使用到精灵类,CCSprite类在cocos2d-x中类结构图如
为了观察CCSprite的功能打开CCSprite.h文件,CCSprite.h文件中通过代码描述了CCSprite的功能和实现方法
#ifndef __SPITE_NODE_CCSPRITE_H__
#define __SPITE_NODE_CCSPRITE_H__
#include "base_nodes/CCNode.h"
#include "CCProtocols.h"
#include "textures/CCTextureAtlas.h"
#include "ccTypes.h"
#include "cocoa/CCDictionary.h"
#include
#ifdef EMSCRIPTEN
#include "base_nodes/CCGLBufferedNode.h"
#endif // EMSCRIPTEN
NS_CC_BEGIN
class CCSpriteBatchNode;
class CCSpriteFrame;
class CCAnimation;
class CCRect;
class CCPoint;
class CCSize;
class CCTexture2D;
struct transformValues_;
#define CCSpriteIndexNotInitialized 0xffffffff /// CCSprite invalid index on the CCSpriteBatchNode
class CC_DLL CCSprite : public CCNodeRGBA, public CCTextureProtocol
#ifdef EMSCRIPTEN
, public CCGLBufferedNode
#endif // EMSCRIPTEN
{
public:
//创建一个空的精灵
static CCSprite* create();
//通过文件创建精灵
static CCSprite* create(const char *pszFileName);
//通过文件和矩形创建精灵
static CCSprite* create(const char *pszFileName, const CCRect& rect);
//通过纹理创建精灵
static CCSprite* createWithTexture(CCTexture2D *pTexture);
//通过纹理和矩形创建精灵
static CCSprite* createWithTexture(CCTexture2D *pTexture, const CCRect& rect);
//通过精灵帧创建精灵
static CCSprite* createWithSpriteFrame(CCSpriteFrame *pSpriteFrame);
//通过精灵帧和矩形创建精灵
static CCSprite* createWithSpriteFrameName(const char *pszSpriteFrameName);
//构造函数
CCSprite(void);
//析构函数
virtual ~CCSprite(void);
//初始化实例
virtual bool init(void);
//初始化纹理
virtual bool initWithTexture(CCTexture2D *pTexture);
//初始化纹理和矩形
virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect);
//初始化纹理、矩形和扭转
virtual bool initWithTexture(CCTexture2D *pTexture, const CCRect& rect, bool rotated);
//初始化精灵帧
virtual bool initWithSpriteFrame(CCSpriteFrame *pSpriteFrame);
//初始化精灵帧
virtual bool initWithSpriteFrameName(const char *pszSpriteFrameName);
//初始化文件
virtual bool initWithFile(const char *pszFilename);
//初始化文件和矩形
virtual bool initWithFile(const char *pszFilename, const CCRect& rect);
//设置纹理
virtual void setTexture(CCTexture2D *texture);
//得到纹理
virtual CCTexture2D* getTexture(void);
//设置精灵条
inline void setBlendFunc(ccBlendFunc blendFunc) { m_sBlendFunc = blendFunc; }
//得到精灵条
inline ccBlendFunc getBlendFunc(void) { return m_sBlendFunc; }
//设置精灵的比例
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);
//从父节点中删除当前子节点 如果Cleanup为true则删除当前节点的所有动作
virtual void removeAllChildrenWithCleanup(bool bCleanup);
//重新设定精灵的zOrder
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);
//设置VertexZ(VertexZ和Zorder的功能一样,都表示渲染顺序)
virtual void setVertexZ(float fVertexZ);
//设置描点的坐标
virtual void setAnchorPoint(const CCPoint& anchor);
//是否忽略描点
virtual void ignoreAnchorPointForPosition(bool value);
//设置精灵是否可见
virtual void setVisible(bool bVisible);
//绘图
virtual void draw(void);
//设置颜色
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);
//更新变化
virtual void updateTransform(void);
//得到批量结点
virtual CCSpriteBatchNode* getBatchNode(void);
//设置批量结点
virtual void setBatchNode(CCSpriteBatchNode *pobSpriteBatchNode);
//设置纹理所在的矩形区域
virtual void setTextureRect(const CCRect& rect);
//设置纹理所在的矩形区域
virtual void setTextureRect(const CCRect& rect, bool rotated, const CCSize& untrimmedSize);
//设置顶点矩形
virtual void setVertexRect(const CCRect& rect);
//设置显示精灵帧
virtual void setDisplayFrame(CCSpriteFrame *pNewFrame);
//判断是否创建了精灵帧
virtual bool isFrameDisplayed(CCSpriteFrame *pFrame);
//返回当前显示的精灵帧
virtual CCSpriteFrame* displayFrame(void);
//设置精灵帧的名字和索引
virtual void setDisplayFrameWithAnimationName(const char *animationName, int frameIndex);
//返回精灵是否需要更新
inline virtual bool isDirty(void) { return m_bDirty; }
//设置精灵是否需要更新
inline virtual void setDirty(bool bDirty) { m_bDirty = bDirty; }
//返回特克斯坐标、顶点坐标和颜色
inline ccV3F_C4B_T2F_Quad getQuad(void) { return m_sQuad; }
//是否旋转纹理所在的矩形
inline bool isTextureRectRotated(void) { return m_bRectRotated; }
//得到纹理索引
inline unsigned int getAtlasIndex(void) { return m_uAtlasIndex; }
//设置纹理索引
inline void setAtlasIndex(unsigned int uAtlasIndex) { m_uAtlasIndex = uAtlasIndex; }
//得到精灵的坐标
inline const CCRect& getTextureRect(void) { return m_obRect; }
//得到精灵引用
inline CCTextureAtlas* getTextureAtlas(void) { return m_pobTextureAtlas; }
//设置精灵引用
inline void setTextureAtlas(CCTextureAtlas *pobTextureAtlas) { m_pobTextureAtlas = pobTextureAtlas; }
//得到精灵偏移的位置
inline const CCPoint& getOffsetPosition(void) { return m_obOffsetPosition; }
//返回精灵是否快速翻转
bool isFlipX(void);
//设置精灵翻转
void setFlipX(bool bFlipX);
//判断精灵翻转
bool isFlipY(void);
//设置精灵翻转
void setFlipY(bool bFlipY);
protected:
void updateColor(void);
virtual void setTextureCoords(CCRect rect);
virtual void updateBlendFunc(void);
virtual void setReorderChildDirtyRecursively(void);
virtual void setDirtyRecursively(bool bValue);
CCTextureAtlas* m_pobTextureAtlas; /// CCSpriteBatchNode texture atlas (weak reference)
unsigned int m_uAtlasIndex; /// Absolute (real) Index on the SpriteSheet
CCSpriteBatchNode* m_pobBatchNode; /// Used batch node (weak reference)
bool m_bDirty; /// Whether the sprite needs to be updated
bool m_bRecursiveDirty; /// Whether all of the sprite's children needs to be updated
bool m_bHasChildren; /// Whether the sprite contains children
bool m_bShouldBeHidden; /// should not be drawn because one of the ancestors is not visible
CCAffineTransform m_transformToBatch;
//
// Data used when the sprite is self-rendered
//
ccBlendFunc m_sBlendFunc; /// It's required for CCTextureProtocol inheritance
CCTexture2D* m_pobTexture; /// CCTexture2D object that is used to render the sprite
//
// Shared data
//
// texture
CCRect m_obRect; /// Retangle of CCTexture2D
bool m_bRectRotated; /// Whether the texture is rotated
// Offset Position (used by Zwoptex)
CCPoint m_obOffsetPosition;
CCPoint m_obUnflippedOffsetPositionFromCenter;
// vertex coords, texture coords and color info
ccV3F_C4B_T2F_Quad m_sQuad;
bool m_bOpacityModifyRGB;//是否不透明
//精灵翻转
bool m_bFlipX;//是否沿着x轴翻转
bool m_bFlipY;//是否沿着y轴翻转
};
NS_CC_END
#endif // __SPITE_NODE_CCSPRITE_H__
在使用Sprite之前需要创建Sprite,创建Sprite的方法可以看我的博客
Cocos2d-X中创建精灵 :http://blog.csdn.net/u010105970/article/details/39617335
创建好精灵后就可以使用精灵了,使用精灵可以参考本人的博客
玩转精灵:http://blog.csdn.net/u010105970/article/details/39638009
当需要处理大量精灵时,为了提高编程效率需要用批处理精灵,批处理精灵的方法可以参考本人的博客
Cocos2d-X中实现批处理精灵:http://blog.csdn.net/u010105970/article/details/39899399