虽然使用CCSpeed能够改变动作的速度,然而它只能按比例改变目标动作的速度。如果我们要实现动作由快到慢、速度随时间改变的变速运动,需要不停地修改它的speed属性才能实现,显然这是一个很烦琐的方法。下面将要介绍的CCActionEase系列动作通过使用内置的多种自动速度变化来解决这一问题。
CCActionEase系列包含15个动作,它们可以被概括为5类动作:指数缓冲、Sine缓冲、弹性缓冲、跳跃缓冲和回震缓冲。每一类动作都有3个不同时期的变换:In、Out和InOut。下面使用时间变换图像表示每组CCActionEase动作的作用效果,其中横坐标表示实际动画时间,纵坐标表示变换后的动画时间。因此,线性动作的图像应该是一条自左下角到右上角的直线
例子代码:
CCEaseBackIn* backIn = CCEaseBackIn::create(dynamic_cast<CCActionInterval *>(moveTo1) ); sprite1->runAction(backIn);
我们来解释一下变速运动的几个类:
CCActionEase这个类是所有的ease类的基类,它继承了
class CC_DLL CCActionEase : public CCActionInterval { public: virtual ~CCActionEase(void); /** initializes the action */ bool initWithAction(CCActionInterval *pAction); virtual CCObject* copyWithZone(CCZone* pZone); virtual void startWithTarget(CCNode *pTarget); virtual void stop(void); virtual void update(float time); virtual CCActionInterval* reverse(void); public: /** creates the action @deprecated: This interface will be deprecated sooner or later. */ CC_DEPRECATED_ATTRIBUTE static CCActionEase* actionWithAction(CCActionInterval *pAction); /** creates the action */ static CCActionEase* create(CCActionInterval *pAction); protected: CCActionInterval *m_pOther; };
CCEaseRateAction它是CCActionEase的派生类,而CCEaseRateAction,它是按变速运动的比例运动。它的三个派生类
CCEaseIn,CCEaseout, CCEaseInOut
CCEaseOut由快至慢。
CCEaseInOut,是前两者的综合。
CCEaseExponentialIn,CCEaseExponentialOut, CCEaseExponentialInOut,的基类是CCActionEase
CCEaseExponentialIn,由慢至快,没有比例参数
CCEaseExponentialOut由快至慢,开始忽然加速
CCEaseExponentialInOut,前两者的综合
CCEaseSineIn, CCEaseSineout, CCEaseSineInOut基类是CCActionEase,它是弹性缓冲。