Cocos2d-X中的CCSprite,Cocos2d-XCCSprite

來源:互聯網
上載者:User

Cocos2d-X中的CCSprite,Cocos2d-XCCSprite


 在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 <string>#ifdef EMSCRIPTEN#include "base_nodes/CCGLBufferedNode.h"#endif // EMSCRIPTENNS_CC_BEGINclass CCSpriteBatchNode;class CCSpriteFrame;class CCAnimation;class CCRect;class CCPoint;class CCSize;class CCTexture2D;struct transformValues_;#define CCSpriteIndexNotInitialized 0xffffffff     /// CCSprite invalid index on the CCSpriteBatchNodeclass 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



cocos2d-x怎最佳化CCSprite的繪製

你先用TexturePacker產生pvr圖,然後用CCSpriteBatchNode載入pvr,把CCSpriteBatchNode添加到Layer中,然後添加CCSprite的時候,建立好CCSprite後,把CCSprite中添加到CCSpriteBatchNode中,讓CCSpriteNode自己去最佳化CCSprite。
不知道這個回答你時候滿意。
 
cocos2d-x中 CCSprite怎沒有create函數?還有很多CCArray也沒有create? 為何?

cocos2d-x 版本不同所以構造方法名稱不同; 你使用的版本和你查看的資料不是一個版本;
如果沒有 CCSprite::Create... 你可以試試有沒有 CCSprite::SpriteWith... ,

其他的也一樣比如: CCArray::ArrayWith...
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.