Cocos2d-x结构学习七CCDirector、CCLabelTTF、CCLabelProtocol、CC_PROPERTY、TypeInfo

1、cclabelTTF:字体处理类,继承自CCSprite和cclabelProtocol

class CC_DLL cclabelTTF : public CCSprite,public cclabelProtocol
{
public:
    cclabelTTF();
    virtual ~cclabelTTF();
  
    const char* description();           //获取描述信息
    
    static cclabelTTF * create(const char *string,const char *fontName,float fontSize);     //几个创建相关的函数
    static cclabelTTF * create(const char *string,float fontSize,const CCSize& dimensions,CCTextAlignment hAlignment);
    static cclabelTTF * create(const char *string,CCTextAlignment hAlignment,CCVerticalTextAlignment vAlignment);
    static cclabelTTF * createWithFontDeFinition(const char *string,ccFontDeFinition &textDeFinition);
    
    bool initWithString(const char *string,float fontSize);                 //几个初始化相关的函数
    bool initWithString(const char *string,CCTextAlignment hAlignment);
    bool initWithString(const char *string,CCVerticalTextAlignment vAlignment);
    bool initWithStringAndTextDeFinition(const char *string,ccFontDeFinition &textDeFinition);
    
    void setTextDeFinition(ccFontDeFinition *theDeFinition);    //设置和获得纹理定义
    ccFontDeFinition * getTextDeFinition();
    
    void enableShadow(const CCSize &shadowOffset,float shadowOpacity,float shadowBlur,bool mustUpdateTexture = true);   //两个阴影相关函数
    void disableShadow(bool mustUpdateTexture = true);
    
    void enablestroke(const ccColor3B &strokeColor,float strokeSize,bool mustUpdateTexture = true);
    void disablestroke(bool mustUpdateTexture = true);
    
    void setFontFillColor(const ccColor3B &tintColor,bool mustUpdateTexture = true);     //设置字体的填出颜色

    bool init();
    static cclabelTTF * create();

    virtual void setString(const char *label);             //设置和获得字符串
    virtual const char* getString(void);
    
    CCTextAlignment getHorizontalAlignment();                  //设置和获得水平对齐
    void setHorizontalAlignment(CCTextAlignment alignment);
    
    CCVerticalTextAlignment getVerticalAlignment();                         //设置和获得垂直对齐
    void setVerticalAlignment(CCVerticalTextAlignment verticalAlignment);
    
    CCSize getDimensions();                          //设置和获得尺寸
    void setDimensions(const CCSize &dim);
    
    float getFontSize();                           //设置和获得字体尺寸
    void setFontSize(float fontSize);
    
    const char* getFontName();                       //获得和设置字体名字
    void setFontName(const char *fontName);
    
private:
    bool updateTexture();     %2�q@                    //更新纹理
protected:
    void                _updateWithTextDeFinition(ccFontDeFinition & textDeFinition,bool mustUpdateTexture = true);
    ccFontDeFinition    _prepareTextDeFinition(bool adjustForResolution = false);
    
    CCSize m_tDimensions;
    CCTextAlignment         m_hAlignment;
    CCVerticalTextAlignment m_vAlignment;
    std::string * m_pFontName;
    float m_fFontSize;
    std::string m_string;
    
    bool    m_shadowEnabled;
    CCSize  m_shadowOffset;
    float   m_shadowOpacity;
    float   m_shadowBlur;
    
    bool        m_strokeEnabled;
    ccColor3B   m_strokeColor;
    float       m_strokeSize;
    ccColor3B   m_textFillColor;
};
2、cclabelProtocol:标签协议类,两个函数,设置字符串和获得字符串
class CC_DLL cclabelProtocol
{
public:
    virtual void setString(const char *label) = 0;
    virtual const char* getString(void) = 0;
};
3、CCDirector:导演类,可以处理场景间的切换等,继承自CCObject和TypeInfo
class CC_DLL CCDirector : public CCObject,public TypeInfo
{
public:
    CCDirector(void);
    virtual ~CCDirector(void);
    virtual bool init(void);           //初始化
   
    virtual long getClasstypeInfo() {
		static const long id = cocos2d::getHashCodeByString(typeid(cocos2d::CCDirector).name());
		return id;
    }                               //获得类信息

    inline CCScene* getRunningScene(void) { return m_pRunningScene; }    //获得正在运行的场景

    inline double getAnimationInterval(void) { return m_dAnimationInterval; } //获得和设置动画帧率
    virtual void setAnimationInterval(double dValue) = 0;

    inline bool isdisplayStats(void) { return m_bdisplayStats; }                          //判断或获得是否在屏幕上显示帧率信息
    inline void setdisplayStats(bool bdisplayStats) { m_bdisplayStats = bdisplayStats; }
    
    inline float getSecondsPerFrame() { return m_fSecondsPerFrame; }
    inline CCEGLView* getopenGLView(void) { return m_pobOpenGLView; }    //设置和获得openGL视口
    void setopenGLView(CCEGLView *pobOpenGLView);

    inline bool isNextDeltaTimeZero(void) { return m_bNextDeltaTimeZero; }   //判断和设置下一次时间
    void setNextDeltaTimeZero(bool bNextDeltaTimeZero);

    inline bool isPaused(void) { return m_bPaused; }                 //判断场景是否暂停运行

    inline unsigned int getTotalFrames(void) { return m_uTotalFrames; }
    
    inline ccDirectorProjection getProjection(void) { return m_eProjection; }     //openGl投影相关
    void setProjection(ccDirectorProjection kProjection);
    void reshapeProjection(const CCSize& newWindowSize);
    
    void setViewport();                                         //设置openGL视口

    inline bool isSendCleanupToScene(void) { return m_bSendCleanupToScene; }
    CCNode* getNotificationNode();
    void setNotificationNode(CCNode *node);
    
    CCDirectorDelegate* getDelegate() const;               //获得和设置委派
    void setDelegate(CCDirectorDelegate* pDelegate);

    CCSize getWinSize(void);                           //以下几个均和openGL相关,坐标转换,窗体大小,可见大小等
    CCSize getWinSizeInPixels(void);
    CCSize getVisibleSize();
    CCPoint getVisibleOrigin();
    CCPoint convertToGL(const CCPoint& obPoint);
    CCPoint convertToUI(const CCPoint& obPoint);
    float getZEye(void);

    void runWithScene(CCScene *pScene);           //运行场景

    void pushScene(CCScene *pScene);               //压入一个场景进堆栈

    void popScene(void);                           //从堆栈弹出一个场景

    void popToRootScene(void);

    void replaceScene(CCScene *pScene);            //替换场景

    void end(void);                         //结束

    void pause(void);                   //暂停场景的运行

    void resume(void);                 //唤醒场景的运行

    virtual void stopAnimation(void) = 0;        //开始和停止动画
    virtual void startAnimation(void) = 0;

    void drawScene(void);                      //绘制场景

    void purgeCachedData(void);
    void setDefaultValues(void);
    void setGLDefaultValues(void);

    void setAlphaBlending(bool bOn);    //启用和禁用混合及深度测试
    void setDepthTest(bool bOn);

    virtual void mainLoop(void) = 0;    //主循环
    void setContentScaleFactor(float scaleFactor);       //设置上下文缩放因子
    float getContentScaleFactor(void);

public:
    CC_PROPERTY(CCScheduler*,m_pScheduler,Scheduler);

    CC_PROPERTY(CCActionManager*,m_pActionManager,ActionManager);

    CC_PROPERTY(CCTouchdispatcher*,m_pTouchdispatcher,Touchdispatcher);

    CC_PROPERTY(CCKeypaddispatcher*,m_pKeypaddispatcher,Keypaddispatcher);

    CC_PROPERTY(CCAccelerometer*,m_pAccelerometer,Accelerometer);

public:
    static CCDirector* sharedDirector(void);    //获取实例指针

protected:
    void purgeDirector();
    bool m_bPurgeDirecotorInNextLoop;
    
    void setNextScene(void);
    
    void showStats();
    void createStatsLabel();
    void calculateMPF();
    void getFPSImageData(unsigned char** datapointer,unsigned int* length);
    
    void calculateDeltaTime();
protected:
    CCEGLView    *m_pobOpenGLView;

    double m_dAnimationInterval;
    double m_dOldAnimationInterval;

    bool m_bLandscape;
    
    bool m_bdisplayStats;
    float m_fAccumDt;
    float m_fFrameRate;
    
    cclabelAtlas *m_pFPSLabel;
    cclabelAtlas *m_pSPFLabel;
    cclabelAtlas *m_pDrawsLabel;

    bool m_bPaused;

    unsigned int m_uTotalFrames;
    unsigned int m_uFrames;
    float m_fSecondsPerFrame;
   
    CCScene *m_pRunningScene;
   
    CCScene *m_pNextScene;
   
    bool    m_bSendCleanupToScene;

    CCArray* m_pobScenesStack;
    
    struct cc_timeval *m_pLastUpdate;

    bool m_bNextDeltaTimeZero;
   
    ccDirectorProjection m_eProjection;
    CCSize    m_obWinSizeInPoints;
    float    m_fContentScaleFactor;
    char *m_pszFPS;
    CCNode *m_pNotificationNode;
    CCDirectorDelegate *m_pProjectionDelegate;
    friend class CCEGLViewProtocol;
};
4、CC_PROPERTY:一个带定义,设置和获得属性的宏,简化工作
#define CC_PROPERTY(varType,varName,funName)\
protected: varType varName;\
public: virtual varType get##funName(void);\
public: virtual void set##funName(varType var);
5、TypeInfo:一个简单的小型类,可以获得类的信息
class TypeInfo
{
public:
	virtual long getClasstypeInfo() = 0;
};

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...