首先,分析一下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;
};
繼承自CCAction
的CCFiniteTimeAction
主要新增了一個用於保存該動作總的完成時間的成員變量:ccTime
m_fDuration
。
對於CCFiniteTimeAction
的兩個子類CCActionInstant
和CCActionInterval
,前者沒有新增任何函數和變量,而後者增加了兩個成員變量——ccTime
m_elapsed
和bool m_bFirstTick
,其中m_elapsed
是從動作開始起逝去的時間,而m_bFirstTick
是一個控制變量,在後面的分析中,我們將看到它的作用。