- //淡入动画:渐渐显现的动画.
- class CC_DLL CCFadeIn : public CCActionInterval
- {
- public:
- //重载相应函数.
- virtual void update(float time);
- virtual CCActionInterval* reverse(void);
- virtual CCObject* copyWithZone(CCZone* pZone);
-
- public:
- //创建一个淡入动画,内部调用create实现.参数为淡入时间.
- CC_DEPRECATED_ATTRIBUTE static CCFadeIn* actionWithDuration(float d);
- //创建一个淡入动画
- static CCFadeIn* create(float d);
- };
- 具体实现:
- //创建一个淡入动画,内部调用create实现.
- CCFadeIn* CCFadeIn::actionWithDuration(float d)
- {
- return CCFadeIn::create(d);
- }
- //创建一个渐渐显现的淡入动画.
- CCFadeIn* CCFadeIn::create(float d)
- {
- //利用new创建一个淡入动画.初始化后交由内存管理器进行释放处理.
- CCFadeIn* pAction = new CCFadeIn();
-
- pAction->initWithDuration(d);
- pAction->autorelease();
- //返回创建的淡入动画.
- return pAction;
- }
- //创建一个拷贝.
- CCObject* CCFadeIn::copyWithZone(CCZone *pZone)
- {
- CCZone* pNewZone = NULL;
- CCFadeIn* pCopy = NULL;
- if(pZone && pZone->m_pCopyObject)
- {
- //in case of being called at sub class
- pCopy = (CCFadeIn*)(pZone->m_pCopyObject);
- }
- else
- {
- pCopy = new CCFadeIn();
- pZone = pNewZone = new CCZone(pCopy);
- }
-
- CCActionInterval::copyWithZone(pZone);
-
- CC_SAFE_DELETE(pNewZone);
-
- return pCopy;
- }
- //更新淡入动画.
- void CCFadeIn::update(float time)
- {
- //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
- CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
- if (pRGBAProtocol)
- { //如果转换成功,按时间进度设置透明度.透明度取值0~255,所以要乘以255.
- pRGBAProtocol->setOpacity((GLubyte)(255 * time));
- }
- /*m_pTarget->setOpacity((GLubyte)(255 * time));*/
- }
- //创建一个反向播放的淡入动画.其实是创建一个相同时间的渐渐消失的淡出动画.
- CCActionInterval* CCFadeIn::reverse(void)
- {
- return CCFadeOut::create(m_fDuration);
- }
CCFadeOut:
- //淡出动画:渐渐消失的动画.
- class CC_DLL CCFadeOut : public CCActionInterval
- {
- public:
- //重载相应函数.
- virtual void update(float time);
- virtual CCActionInterval* reverse(void);
- virtual CCObject* copyWithZone(CCZone* pZone);
-
- public:
- //创建一个淡出动画,内部调用create实现.参数为淡入时间.
- CC_DEPRECATED_ATTRIBUTE static CCFadeOut* actionWithDuration(float d);
-
- //创建一个淡出动画.
- static CCFadeOut* create(float d);
- };
- 具体实现:
- //创建一个淡出动画,内部调用create实现.参数为淡入时间.
- CCFadeOut* CCFadeOut::actionWithDuration(float d)
- {
- return CCFadeOut::create(d);
- }
- //创建一个淡出动画.
- CCFadeOut* CCFadeOut::create(float d)
- {
- //利用new创建一个淡出动画.初始化后交由内存管理器进行释放处理.
- CCFadeOut* pAction = new CCFadeOut();
-
- pAction->initWithDuration(d);
- pAction->autorelease();
- //返回创建的动画实例对象指针.
- return pAction;
- }
- //创建拷贝.
- CCObject* CCFadeOut::copyWithZone(CCZone *pZone)
- {
- CCZone* pNewZone = NULL;
- CCFadeOut* pCopy = NULL;
- if(pZone && pZone->m_pCopyObject)
- {
- //in case of being called at sub class
- pCopy = (CCFadeOut*)(pZone->m_pCopyObject);
- }
- else
- {
- pCopy = new CCFadeOut();
- pZone = pNewZone = new CCZone(pCopy);
- }
-
- CCActionInterval::copyWithZone(pZone);
-
- CC_SAFE_DELETE(pNewZone);
-
- return pCopy;
- }
- //更新淡出动画.
- void CCFadeOut::update(float time)
- {
- //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
- CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
- if (pRGBAProtocol)
- { //如果转换成功,按时间进度设置透明度.透明度取值0~255,所以要乘以255.
- pRGBAProtocol->setOpacity(GLubyte(255 * (1 - time)));
- }
- /*m_pTarget->setOpacity(GLubyte(255 * (1 - time)));*/
- }
- //创建一个反向播放的淡出动画.其实是创建一个相同时间的渐渐显示的淡入动画.
- CCActionInterval* CCFadeOut::reverse(void)
- {
- return CCFadeIn::create(m_fDuration);
- }
-
- //透明度渐变动画:从当前透明度渐渐变化到指定的透明度.
- class CC_DLL CCFadeTo : public CCActionInterval
- {
- public:
- //初始化,参数一为时间长度,参数二为目标透明度。
- bool initWithDuration(float duration, GLubyte opacity);
- //重载基类相应函数。
- virtual CCObject* copyWithZone(CCZone* pZone);
- virtual void startWithTarget(CCNode *pTarget);
- virtual void update(float time);
-
- public:
- //创建一个透明度渐变动画,内部调用create实现,参数一为时间长度,参数二为目标透明度。
- CC_DEPRECATED_ATTRIBUTE static CCFadeTo* actionWithDuration(float duration, GLubyte opacity);
- //创建一个透明度渐变动画。
- static CCFadeTo* create(float duration, GLubyte opacity);
- protected:
- //目标透明度
- GLubyte m_toOpacity;
- //当前透明度。
- GLubyte m_fromOpacity;
- };
- 具体实现:
- //创建一个透明度渐变动画,内部调用create实现,参数一为时间长度,参数二为目标透明度。
- CCFadeTo* CCFadeTo::actionWithDuration(float duration, GLubyte opacity)
- {
- return CCFadeTo::create(duration, opacity);
- }
- //创建一个透明度渐变动画。
- CCFadeTo* CCFadeTo::create(float duration, GLubyte opacity)
- {
- //利用new创建一个透明度渐变动画.初始化后交由内存管理器进行释放处理.
- CCFadeTo *pFadeTo = new CCFadeTo();
- pFadeTo->initWithDuration(duration, opacity);
- pFadeTo->autorelease();
- //返回创建的动画实例对象指针。
- return pFadeTo;
- }
- //初始化。
- bool CCFadeTo::initWithDuration(float duration, GLubyte opacity)
- {
- //调用基类的初始化函数。
- if (CCActionInterval::initWithDuration(duration))
- {
- //保存目标透明度值并返回成功。
- m_toOpacity = opacity;
- return true;
- }
- //否则返回失败。
- return false;
- }
- //创建拷贝。
- CCObject* CCFadeTo::copyWithZone(CCZone *pZone)
- {
- CCZone* pNewZone = NULL;
- CCFadeTo* pCopy = NULL;
- if(pZone && pZone->m_pCopyObject)
- {
- //in case of being called at sub class
- pCopy = (CCFadeTo*)(pZone->m_pCopyObject);
- }
- else
- {
- pCopy = new CCFadeTo();
- pZone = pNewZone = new CCZone(pCopy);
- }
-
- CCActionInterval::copyWithZone(pZone);
-
- pCopy->initWithDuration(m_fDuration, m_toOpacity);
-
- CC_SAFE_DELETE(pNewZone);
- return pCopy;
- }
- //设置演示当前动画的演员。
- void CCFadeTo::startWithTarget(CCNode *pTarget)
- {
- //调用基类相应函数。
- CCActionInterval::startWithTarget(pTarget);
- //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
- CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(pTarget);
- if (pRGBAProtocol)
- {
- //取得当前演员的透明度做为起始透明度。
- m_fromOpacity = pRGBAProtocol->getOpacity();
- }
- /*m_fromOpacity = pTarget->getOpacity();*/
- }
- //更新动画。
- void CCFadeTo::update(float time)
- {
- //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
- CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
- if (pRGBAProtocol)
- {
- //通过时间插值计算当前演员的透明度值。
- pRGBAProtocol->setOpacity((GLubyte)(m_fromOpacity + (m_toOpacity - m_fromOpacity) * time));
- }
- /*m_pTarget->setOpacity((GLubyte)(m_fromOpacity + (m_toOpacity - m_fromOpacity) * time));*/
- }
CCTintTo:
- //变色动画:从当前演员的色彩值变化到目标色彩。
- class CC_DLL CCTintTo : public CCActionInterval
- {
- public:
- //初始化:参一为动画时长,参二,三,四分别代表目标色彩的红色,绿色,蓝色的分量。
- bool initWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue);
- //重载基类函数。
- virtual CCObject* copyWithZone(CCZone* pZone);
- virtual void startWithTarget(CCNode *pTarget);
- virtual void update(float time);
-
- public:
- //创建一个变色动画,内部调用create实现。参一为动画时长,参二,三,四分别代表目标色彩的红色,绿色,蓝色的分量。
- CC_DEPRECATED_ATTRIBUTE static CCTintTo* actionWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue);
- //创建一个变色动画。
- static CCTintTo* create(float duration, GLubyte red, GLubyte green, GLubyte blue);
- protected:
- //目标的三原色。
- ccColor3B m_to;
- //起始的三原色。
- ccColor3B m_from;
- };
- 具体实现:
- //创建一个变色动画,内部调用create实现。参一为动画时长,参二,三,四分别代表目标色彩的红色,绿色,蓝色的分量。
- CCTintTo* CCTintTo::actionWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue)
- {
- return CCTintTo::create(duration, red, green, blue);
- }
- //创建一个变色动画。
- CCTintTo* CCTintTo::create(float duration, GLubyte red, GLubyte green, GLubyte blue)
- {
- //利用new创建一个变色动画.初始化后交由内存管理器进行释放处理.
- CCTintTo *pTintTo = new CCTintTo();
- pTintTo->initWithDuration(duration, red, green, blue);
- pTintTo->autorelease();
- //返回创建的动画实例对象指针。
- return pTintTo;
- }
- //初始化。
- bool CCTintTo::initWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue)
- {
- //先调用基类的初始化函数。
- if (CCActionInterval::initWithDuration(duration))
- {
- //保存目标色彩值。
- m_to = ccc3(red, green, blue);
- //返回成功。
- return true;
- }
- //如果初始化失败返回false。
- return false;
- }
- //创建拷贝。
- CCObject* CCTintTo::copyWithZone(CCZone *pZone)
- {
- CCZone* pNewZone = NULL;
- CCTintTo* pCopy = NULL;
- if(pZone && pZone->m_pCopyObject)
- {
- //in case of being called at sub class
- pCopy = (CCTintTo*)(pZone->m_pCopyObject);
- }
- else
- {
- pCopy = new CCTintTo();
- pZone = pNewZone = new CCZone(pCopy);
- }
-
- CCActionInterval::copyWithZone(pZone);
-
- pCopy->initWithDuration(m_fDuration, m_to.r, m_to.g, m_to.b);
-
- CC_SAFE_DELETE(pNewZone);
- return pCopy;
- }
- //设置演示变色动画的演员。
- void CCTintTo::startWithTarget(CCNode *pTarget)
- {
- //调用基类的相应函数。
- CCActionInterval::startWithTarget(pTarget);
- //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
- CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
- if (pRGBAProtocol)
- {
- //取得演员的色彩值做为起始色彩值。
- m_from = pRGBAProtocol->getColor();
- }
- /*m_from = pTarget->getColor();*/
- }
- //更新动画的播放。
- void CCTintTo::update(float time)
- {
- //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
- CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
- if (pRGBAProtocol)
- {
- //利用时间对色彩变化进行插值,计算出演员的当前色彩值。
- pRGBAProtocol->setColor(ccc3(GLubyte(m_from.r + (m_to.r - m_from.r) * time),
- (GLbyte)(m_from.g + (m_to.g - m_from.g) * time),
- (GLbyte)(m_from.b + (m_to.b - m_from.b) * time)));
- }
- }
转自http://blog.csdn.net/honghaier/article/details/8214030