Cocos2d-x学习笔记(七)—— 动作处理

前端之家收集整理的这篇文章主要介绍了Cocos2d-x学习笔记(七)—— 动作处理前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

动作类型

瞬时动作:

瞬间执行的动画,我们无法看到它变化的过程。

  1. CCSize s = Director::getInstance()->getWinSize();
  2.  
  3. CCLabelTTF *label = CCLabelTTF::create("windowslake","A Damn Mess",23);
  4. label->setPosition(Vec2(0,s.height / 2));
  5. this->addChild(label,1);
  6.  
  7. // 根据提供的点执行设置位置动作
  8. CCPlace *place = CCPlace::create(Vec2(s.width / 2,s.height / 2));
  9. label->runAction(place);
  10.  
  11. // 隐藏动作(使我们的控件不可见)
  12. CCHide *hide = CCHide::create();
  13. label->runAction(hide);
  14. // 显示动作
  15. CCShow *show = CCShow::create();
  16. label->runAction(show);
  17.  
  18. // 当控件可见时,使其隐藏,当其隐藏时,使其可见
  19. CCToggleVisibility *tv = CCToggleVisibility::create();
  20. label->runAction(tv);
  21. CCToggleVisibility *tv2 = CCToggleVisibility::create();
  22. label->runAction(tv2);
  23.  
  24. // 使控件延中心点做x轴翻转
  25. //CCFlipX *flipx = CCFlipX::create(true);
  26. //label->runAction(flipx);
  27.  
  28. //// 使控件延中心点做y轴翻转
  29. //CCFlipY *flipy = CCFlipY::create(true);
  30. //label->runAction(flipy);

延时动画:

逐渐执行的动画,有渐变性,我们可以看到它的改变,这里只是列举几种。

  1. // 闪烁
  2. CCBlink *blink = CCBlink::create(3.0f,10);
  3. label->runAction(blink);
  4.  
  5.  
  6. // 颜色转变
  7. CCTintTo *tintto = CCTintTo::create(3.0f,255,0);
  8. label->runAction(tintto);
  9.  
  10.  
  11. // 从隐藏到显示
  12. CCFadeIn *fadein = CCFadeIn::create(3.f);
  13. label->runAction(fadein);

组合动作:

将多种动作组合起来播放,可同步也可异步。

  1. // 用序列执行异步动画,即一个一个执行,参数为NULL时,表示添加动画效果结束
  2. CCFiniteTimeAction *sequence = CCSequence::create(fadeout,tintto,NULL);
  3. label->runAction(sequence);
  4.  
  5. // 用序列执行同步动画,全部一起执行,参数为NULL时,表示添加动画效果结束
  6. CCFiniteTimeAction *spawn = CCSpawn::create(fadeout,NULL);
  7. label->runAction(spawn);
  8.  
  9. // 重复执行动作,参数2为执行次数
  10. CCFiniteTimeAction *sequence = CCSequence::create(fadeout,fadein,NULL);
  11. CCRepeat *repeat = CCRepeat::create(sequence,5);
  12. label->runAction(repeat);
  13.  
  14. // 无限重复执行动作
  15. CCRepeatForever *repeatforever = CCRepeatForever::create((CCActionInterval*)sequence);
  16. label->runAction(repeatforever);

还有一种特殊的组合动作,用图片来播放动作,简称动画帧。
  1. // 帧动画,通过图片形式,一帧一帧的播放动画(这里我们有14张图片
  2. CCSprite *grossini = CCSprite::create("grossini_dance_01.png");
  3. grossini->setPosition(s.width / 2,s.height / 2);
  4. this->addChild(grossini);
  5. // 帧数(图片的张数)
  6. int framecount = 15;
  7.  
  8. // 创建动画帧
  9. CCAnimation *animation = CCAnimation::create();
  10. for (int i = 1; i < framecount; i++)
  11. {
  12. // 字符数组,存储图片
  13. char str[50] = { 0 };
  14. // 将图片名打印到str
  15. sprintf(str,"grossini_dance_%02d.png",i);
  16. // 创建图片动画帧
  17. animation->addSpriteFrameWithFile(str);
  18. }
  19. // 每个动画帧的间隔时间
  20. animation->setDelayPerUnit(1.0f);
  21. // 通过setRestoreOriginalFrame来设置是否在动画播放结束后恢复到第一帧
  22. animation->setRestoreOriginalFrame(true);
  23.  
  24. // 创建动画
  25. CCAnimate *animate = CCAnimate::create(animation);
  26. // 执行动画
  27. grossini->runAction(CCRepeatForever::create(animate));

  1. <pre name="code" class="cpp">/*
  2. * AnimationCache可以加载xml/plist文件,plist文件里保存了组成动画的相关信息,
  3. * 通过该类获取到plist文件里的动画。
  4. */
  5. CCSprite *grossini = CCSprite::create("grossini_dance_01.png");
  6. grossini->setPosition(s.width / 2,s.height / 2);
  7. this->addChild(grossini);
  8. // 获取动画缓存实例对象
  9. auto cache = AnimationCache::getInstance();
  10. // 添加动画文件到缓存,plist文件
  11. cache->addAnimationsWithFile("animations-2.plist");
  12. // 从缓存中获取动画对象
  13. auto animation = cache->getAnimation("dance_1");
  14.  
  15. auto action = Animate::create(animation);
  16. grossini->runAction(Sequence::create(action,action->reverse(),NULL));
  1.  

动作继承表:

猜你在找的Cocos2d-x相关文章