CCSprite類

class CC_DLL CCSprite : public CCNodeRGBA, public CCTextureProtocol
{
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);

    // 初始化精靈對象,2d紋理對象,紋理對象-矩形區域
    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; }
    // 設置x、y放縮係數
    virtual void setScaleX(float fScaleX);
    virtual void setScaleY(float fScaleY);
    // 設置位置
    virtual void setPosition(const CCPoint& pos);
    // 設置旋轉角度
    virtual void setRotation(float fRotation);
    // 設置x、y的旋轉
    virtual void setRotationX(float fRotationX);
    virtual void setRotationY(float fRotationY);
    // 設置x的扭曲,y的扭曲
    virtual void setSkewX(float sx);
    virtual void setSkewY(float sy);
    // 移除孩子節點
    virtual void removeChild(CCNode* pChild, bool bCleanup);
    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();
    // 設置放縮xy共同的因子
    virtual void setScale(float fScale);
    // 設置節點z值
    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);

     // 設置批處理節點
     //  CCSpriteBatchNode *batch = CCSpriteBatchNode::create("Images/grossini_dance_atlas.png", 15);
     //  CCSprite *sprite = CCSprite::createWithTexture(batch->getTexture(), CCRectMake(0, 0, 57, 57));
     //  batch->addChild(sprite);
     //  layer->addChild(batch);
    virtual void setBatchNode(CCSpriteBatchNode *pobSpriteBatchNode);

     // 設置紋理區域
    virtual void setTextureRect(const CCRect& rect);
    virtual void setTextureRect(const CCRect& rect, bool rotated, const CCSize& untrimmedSize);

     // Sets the vertex rect.It will be called internally by setTextureRect
    virtual void setVertexRect(const CCRect& rect);

     // 設置精靈的顯示幀
    virtual void setDisplayFrame(CCSpriteFrame *pNewFrame);

     // 查詢一個精靈幀是否顯示
    virtual bool isFrameDisplayed(CCSpriteFrame *pFrame);

     // 返回當前顯示幀
    virtual CCSpriteFrame* displayFrame(void);

     // 改變顯示幀,從CCAnimationCache指定的動畫名和索引獲取
    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; }

    // Gets the weak reference of the CCTextureAtlas when the sprite is rendered using via CCSpriteBatchNode
    inline CCTextureAtlas* getTextureAtlas(void) { return m_pobTextureAtlas; }
    // Sets the weak reference of the CCTextureAtlas when the sprite is rendered using via CCSpriteBatchNode
    inline void setTextureAtlas(CCTextureAtlas *pobTextureAtlas) { m_pobTextureAtlas = pobTextureAtlas; }

    // Gets the offset position of the sprite. Calculated automatically by editors like Zwoptex.
    inline const CCPoint& getOffsetPosition(void) { return m_obOffsetPosition; }


     // 查詢精靈x方向是否偏轉
    bool isFlipX(void);
    void setFlipX(bool bFlipX);

      // 查詢精靈y方向是否偏轉
    bool isFlipY(void);
    void setFlipY(bool bFlipY);
        
protected:

    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;

    ccBlendFunc        m_sBlendFunc;            /// It's required for CCTextureProtocol inheritance
    CCTexture2D*       m_pobTexture;            /// CCTexture2D object that is used to render the sprite

    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;

    // opacity and RGB protocol
    bool m_bOpacityModifyRGB;

    // image is flipped
    bool m_bFlipX;                              /// Whether the sprite is flipped horizaontally or not.
    bool m_bFlipY;                              /// Whether the sprite is flipped vertically or not.
};

發佈了21 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章