//淡入动画:渐渐显现的动画.

  1. //淡入动画:渐渐显现的动画.
  2. class CC_DLL CCFadeIn : public CCActionInterval
  3. {
  4. public:
  5.         //重载相应函数.
  6.     virtual void update(float time);
  7.     virtual CCActionInterval* reverse(void);
  8.     virtual CCObject* copyWithZone(CCZone* pZone);

  9. public:
  10.     //创建一个淡入动画,内部调用create实现.参数为淡入时间.
  11.     CC_DEPRECATED_ATTRIBUTE static CCFadeIn* actionWithDuration(float d);
  12.     //创建一个淡入动画
  13.     static CCFadeIn* create(float d);
  14. };
  15. 具体实现:
  16. //创建一个淡入动画,内部调用create实现.
  17. CCFadeIn* CCFadeIn::actionWithDuration(float d)
  18. {
  19.     return CCFadeIn::create(d);
  20. }
  21. //创建一个渐渐显现的淡入动画.
  22. CCFadeIn* CCFadeIn::create(float d)
  23. {
  24.         //利用new创建一个淡入动画.初始化后交由内存管理器进行释放处理.
  25.     CCFadeIn* pAction = new CCFadeIn();

  26.     pAction->initWithDuration(d);
  27.     pAction->autorelease();
  28.         //返回创建的淡入动画.
  29.     return pAction;
  30. }
  31. //创建一个拷贝.
  32. CCObject* CCFadeIn::copyWithZone(CCZone *pZone)
  33. {
  34.     CCZone* pNewZone = NULL;
  35.     CCFadeIn* pCopy = NULL;
  36.     if(pZone && pZone->m_pCopyObject)
  37.     {
  38.         //in case of being called at sub class
  39.         pCopy = (CCFadeIn*)(pZone->m_pCopyObject);
  40.     }
  41.     else
  42.     {
  43.         pCopy = new CCFadeIn();
  44.         pZone = pNewZone = new CCZone(pCopy);
  45.     }
  46.     
  47.     CCActionInterval::copyWithZone(pZone);

  48.     CC_SAFE_DELETE(pNewZone);

  49.     return pCopy;
  50. }
  51. //更新淡入动画.
  52. void CCFadeIn::update(float time)
  53. {
  54.         //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
  55.         CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
  56.     if (pRGBAProtocol)
  57.     {        //如果转换成功,按时间进度设置透明度.透明度取值0~255,所以要乘以255.
  58.         pRGBAProtocol->setOpacity((GLubyte)(255 * time));
  59.     }
  60.     /*m_pTarget->setOpacity((GLubyte)(255 * time));*/
  61. }
  62. //创建一个反向播放的淡入动画.其实是创建一个相同时间的渐渐消失的淡出动画.
  63. CCActionInterval* CCFadeIn::reverse(void)
  64. {
  65.     return CCFadeOut::create(m_fDuration);
  66. }
复制代码

CCFadeOut:
  1. //淡出动画:渐渐消失的动画.
  2. class CC_DLL CCFadeOut : public CCActionInterval
  3. {
  4. public:
  5.         //重载相应函数.
  6.     virtual void update(float time);
  7.     virtual CCActionInterval* reverse(void);
  8.     virtual CCObject* copyWithZone(CCZone* pZone);

  9. public:
  10.     //创建一个淡出动画,内部调用create实现.参数为淡入时间.
  11.     CC_DEPRECATED_ATTRIBUTE static CCFadeOut* actionWithDuration(float d);

  12.     //创建一个淡出动画.
  13.     static CCFadeOut* create(float d);
  14. };
  15. 具体实现:
  16. //创建一个淡出动画,内部调用create实现.参数为淡入时间.
  17. CCFadeOut* CCFadeOut::actionWithDuration(float d)
  18. {
  19.     return CCFadeOut::create(d);
  20. }
  21. //创建一个淡出动画.
  22. CCFadeOut* CCFadeOut::create(float d)
  23. {
  24.         //利用new创建一个淡出动画.初始化后交由内存管理器进行释放处理.
  25.     CCFadeOut* pAction = new CCFadeOut();

  26.     pAction->initWithDuration(d);
  27.     pAction->autorelease();
  28.         //返回创建的动画实例对象指针.
  29.     return pAction;
  30. }
  31. //创建拷贝.
  32. CCObject* CCFadeOut::copyWithZone(CCZone *pZone)
  33. {
  34.     CCZone* pNewZone = NULL;
  35.     CCFadeOut* pCopy = NULL;
  36.     if(pZone && pZone->m_pCopyObject) 
  37.     {
  38.         //in case of being called at sub class
  39.         pCopy = (CCFadeOut*)(pZone->m_pCopyObject);
  40.     }
  41.     else
  42.     {
  43.         pCopy = new CCFadeOut();
  44.         pZone = pNewZone = new CCZone(pCopy);
  45.     }

  46.     CCActionInterval::copyWithZone(pZone);

  47.     CC_SAFE_DELETE(pNewZone);

  48.     return pCopy;
  49. }
  50. //更新淡出动画.
  51. void CCFadeOut::update(float time)
  52. {
  53.         //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
  54.         CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
  55.     if (pRGBAProtocol)
  56.     {        //如果转换成功,按时间进度设置透明度.透明度取值0~255,所以要乘以255.
  57.         pRGBAProtocol->setOpacity(GLubyte(255 * (1 - time)));
  58.     }
  59.     /*m_pTarget->setOpacity(GLubyte(255 * (1 - time)));*/    
  60. }
  61. //创建一个反向播放的淡出动画.其实是创建一个相同时间的渐渐显示的淡入动画.
  62. CCActionInterval* CCFadeOut::reverse(void)
  63. {
  64.     return CCFadeIn::create(m_fDuration);
  65. }

  66. //透明度渐变动画:从当前透明度渐渐变化到指定的透明度.
  67. class CC_DLL CCFadeTo : public CCActionInterval
  68. {
  69. public:
  70.     //初始化,参数一为时间长度,参数二为目标透明度。
  71.     bool initWithDuration(float duration, GLubyte opacity);
  72.         //重载基类相应函数。
  73.     virtual CCObject* copyWithZone(CCZone* pZone);
  74.     virtual void startWithTarget(CCNode *pTarget);
  75.     virtual void update(float time);

  76. public:
  77.     //创建一个透明度渐变动画,内部调用create实现,参数一为时间长度,参数二为目标透明度。
  78.     CC_DEPRECATED_ATTRIBUTE static CCFadeTo* actionWithDuration(float duration, GLubyte opacity);
  79.     //创建一个透明度渐变动画。
  80.     static CCFadeTo* create(float duration, GLubyte opacity);
  81. protected:
  82.         //目标透明度
  83.         GLubyte m_toOpacity;
  84.         //当前透明度。
  85.     GLubyte m_fromOpacity;
  86. };
  87. 具体实现:
  88. //创建一个透明度渐变动画,内部调用create实现,参数一为时间长度,参数二为目标透明度。
  89. CCFadeTo* CCFadeTo::actionWithDuration(float duration, GLubyte opacity)
  90. {
  91.      return CCFadeTo::create(duration, opacity);
  92. }
  93. //创建一个透明度渐变动画。
  94. CCFadeTo* CCFadeTo::create(float duration, GLubyte opacity)
  95. {
  96.         //利用new创建一个透明度渐变动画.初始化后交由内存管理器进行释放处理.
  97.     CCFadeTo *pFadeTo = new CCFadeTo();
  98.     pFadeTo->initWithDuration(duration, opacity);
  99.     pFadeTo->autorelease();
  100.         //返回创建的动画实例对象指针。
  101.     return pFadeTo;
  102. }
  103. //初始化。
  104. bool CCFadeTo::initWithDuration(float duration, GLubyte opacity)
  105. {
  106.         //调用基类的初始化函数。
  107.     if (CCActionInterval::initWithDuration(duration))
  108.         {
  109.         //保存目标透明度值并返回成功。
  110.         m_toOpacity = opacity;
  111.         return true;
  112.     }
  113.         //否则返回失败。
  114.     return false;
  115. }
  116. //创建拷贝。
  117. CCObject* CCFadeTo::copyWithZone(CCZone *pZone)
  118. {
  119.     CCZone* pNewZone = NULL;
  120.     CCFadeTo* pCopy = NULL;
  121.     if(pZone && pZone->m_pCopyObject) 
  122.     {
  123.         //in case of being called at sub class
  124.         pCopy = (CCFadeTo*)(pZone->m_pCopyObject);
  125.     }
  126.     else
  127.     {
  128.         pCopy = new CCFadeTo();
  129.         pZone = pNewZone = new CCZone(pCopy);
  130.     }

  131.     CCActionInterval::copyWithZone(pZone);

  132.     pCopy->initWithDuration(m_fDuration, m_toOpacity);
  133.     
  134.     CC_SAFE_DELETE(pNewZone);
  135.     return pCopy;
  136. }
  137. //设置演示当前动画的演员。
  138. void CCFadeTo::startWithTarget(CCNode *pTarget)
  139. {
  140.         //调用基类相应函数。
  141.     CCActionInterval::startWithTarget(pTarget);
  142.         //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
  143.     CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(pTarget);
  144.     if (pRGBAProtocol)
  145.         {
  146.         //取得当前演员的透明度做为起始透明度。
  147.         m_fromOpacity = pRGBAProtocol->getOpacity();
  148.     }
  149.     /*m_fromOpacity = pTarget->getOpacity();*/
  150. }
  151. //更新动画。
  152. void CCFadeTo::update(float time)
  153. {
  154.         //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
  155.     CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
  156.     if (pRGBAProtocol)
  157.         {
  158.         //通过时间插值计算当前演员的透明度值。
  159.         pRGBAProtocol->setOpacity((GLubyte)(m_fromOpacity + (m_toOpacity - m_fromOpacity) * time));
  160.     }
  161.     /*m_pTarget->setOpacity((GLubyte)(m_fromOpacity + (m_toOpacity - m_fromOpacity) * time));*/
  162. }
复制代码

CCTintTo:
  1. //变色动画:从当前演员的色彩值变化到目标色彩。
  2. class CC_DLL CCTintTo : public CCActionInterval
  3. {
  4. public:
  5.     //初始化:参一为动画时长,参二,三,四分别代表目标色彩的红色,绿色,蓝色的分量。
  6.     bool initWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue);
  7.         //重载基类函数。
  8.     virtual CCObject* copyWithZone(CCZone* pZone);
  9.     virtual void startWithTarget(CCNode *pTarget);
  10.     virtual void update(float time);

  11. public:
  12.     //创建一个变色动画,内部调用create实现。参一为动画时长,参二,三,四分别代表目标色彩的红色,绿色,蓝色的分量。
  13.     CC_DEPRECATED_ATTRIBUTE static CCTintTo* actionWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue);
  14.     //创建一个变色动画。
  15.     static CCTintTo* create(float duration, GLubyte red, GLubyte green, GLubyte blue);
  16. protected:
  17.         //目标的三原色。
  18.         ccColor3B m_to;
  19.         //起始的三原色。
  20.     ccColor3B m_from;
  21. };
  22. 具体实现:
  23. //创建一个变色动画,内部调用create实现。参一为动画时长,参二,三,四分别代表目标色彩的红色,绿色,蓝色的分量。
  24. CCTintTo* CCTintTo::actionWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue)
  25. {
  26.     return CCTintTo::create(duration, red, green, blue);
  27. }
  28. //创建一个变色动画。
  29. CCTintTo* CCTintTo::create(float duration, GLubyte red, GLubyte green, GLubyte blue)
  30. {
  31.         //利用new创建一个变色动画.初始化后交由内存管理器进行释放处理.
  32.     CCTintTo *pTintTo = new CCTintTo();
  33.     pTintTo->initWithDuration(duration, red, green, blue);
  34.     pTintTo->autorelease();
  35.         //返回创建的动画实例对象指针。
  36.     return pTintTo;
  37. }
  38. //初始化。
  39. bool CCTintTo::initWithDuration(float duration, GLubyte red, GLubyte green, GLubyte blue)
  40. {
  41.         //先调用基类的初始化函数。
  42.     if (CCActionInterval::initWithDuration(duration))
  43.         {
  44.         //保存目标色彩值。
  45.         m_to = ccc3(red, green, blue);
  46.         //返回成功。
  47.         return true;
  48.     }
  49.         //如果初始化失败返回false。
  50.     return false;
  51. }
  52. //创建拷贝。
  53. CCObject* CCTintTo::copyWithZone(CCZone *pZone)
  54. {
  55.     CCZone* pNewZone = NULL;
  56.     CCTintTo* pCopy = NULL;
  57.     if(pZone && pZone->m_pCopyObject) 
  58.     {
  59.         //in case of being called at sub class
  60.         pCopy = (CCTintTo*)(pZone->m_pCopyObject);
  61.     }
  62.     else
  63.     {
  64.         pCopy = new CCTintTo();
  65.         pZone = pNewZone = new CCZone(pCopy);
  66.     }

  67.     CCActionInterval::copyWithZone(pZone);

  68.     pCopy->initWithDuration(m_fDuration, m_to.r, m_to.g, m_to.b);
  69.     
  70.     CC_SAFE_DELETE(pNewZone);
  71.     return pCopy;
  72. }
  73. //设置演示变色动画的演员。
  74. void CCTintTo::startWithTarget(CCNode *pTarget)
  75. {
  76.         //调用基类的相应函数。
  77.         CCActionInterval::startWithTarget(pTarget);
  78.         //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
  79.     CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
  80.     if (pRGBAProtocol)
  81.         {
  82.         //取得演员的色彩值做为起始色彩值。
  83.         m_from = pRGBAProtocol->getColor();
  84.     }
  85.     /*m_from = pTarget->getColor();*/
  86. }
  87. //更新动画的播放。
  88. void CCTintTo::update(float time)
  89. {
  90.         //将演员由精灵类降为色彩控制基类CCRGBAProtocol .
  91.     CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
  92.     if (pRGBAProtocol)
  93.         {
  94.         //利用时间对色彩变化进行插值,计算出演员的当前色彩值。
  95.         pRGBAProtocol->setColor(ccc3(GLubyte(m_from.r + (m_to.r - m_from.r) * time), 
  96.             (GLbyte)(m_from.g + (m_to.g - m_from.g) * time),
  97.             (GLbyte)(m_from.b + (m_to.b - m_from.b) * time)));
  98.     }    
  99. }
复制代码

转自http://blog.csdn.net/honghaier/article/details/8214030
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值