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