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是一个控制变量,在后面的分析中,我们将看到它的作用。

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