Cocos2d-x 動作之動作原理——動作類的結構

首先,分析一下CCAction及其子類(主要是CCFiniteTimeAction及其子類)的一些成員函數和成員變量,我們將通過這些變量和函數來分析動作的基本流程。

CCAction的定義中可以看到,在類定義的最後部分有3個成員變量和一些基本方法:

class CC_DLL CCAction : public CCObject 
{
public:
    CCAction(void);
    virtual ~CCAction(void);

    const char* description();
    virtual CCObject* copyWithZone(CCZone *pZone);

    virtual bool isDone(void);
    virtual void startWithTarget(CCNode *pTarget);
    virtual void stop(void);
    virtual void step(float dt);
    virtual void update(float time);

    inline CCNode* getTarget(void) { return m_pTarget; }
    inline void setTarget(CCNode *pTarget) { m_pTarget = pTarget; }

    inline CCNode* getOriginalTarget(void) { return m_pOriginalTarget; } 
    inline void setOriginalTarget(CCNode *pOriginalTarget) { 
        m_pOriginalTarget = pOriginalTarget; }

    inline int getTag(void) { return m_nTag; }
    inline void setTag(int nTag) { m_nTag = nTag; }

public:
    CC_DEPRECATED_ATTRIBUTE static CCAction* action();
    static CCAction* create();
protected:
    CCNode *m_pOriginalTarget;
    CCNode *m_pTarget;
    int m_nTag;
};

繼承自CCActionCCFiniteTimeAction主要新增了一個用於保存該動作總的完成時間的成員變量:ccTime m_fDuration

對於CCFiniteTimeAction的兩個子類CCActionInstantCCActionInterval,前者沒有新增任何函數和變量,而後者增加了兩個成員變量——ccTime m_elapsedbool m_bFirstTick,其中m_elapsed是從動作開始起逝去的時間,而m_bFirstTick是一個控制變量,在後面的分析中,我們將看到它的作用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章