动作类型
瞬时动作:
瞬间执行的动画,我们无法看到它变化的过程。
- CCSize s = Director::getInstance()->getWinSize();
- CCLabelTTF *label = CCLabelTTF::create("windowslake","A Damn Mess",23);
- label->setPosition(Vec2(0,s.height / 2));
- this->addChild(label,1);
- // 根据提供的点执行设置位置动作
- CCPlace *place = CCPlace::create(Vec2(s.width / 2,s.height / 2));
- label->runAction(place);
- // 隐藏动作(使我们的控件不可见)
- CCHide *hide = CCHide::create();
- label->runAction(hide);
- // 显示动作
- CCShow *show = CCShow::create();
- label->runAction(show);
- // 当控件可见时,使其隐藏,当其隐藏时,使其可见
- CCToggleVisibility *tv = CCToggleVisibility::create();
- label->runAction(tv);
- CCToggleVisibility *tv2 = CCToggleVisibility::create();
- label->runAction(tv2);
- // 使控件延中心点做x轴翻转
- //CCFlipX *flipx = CCFlipX::create(true);
- //label->runAction(flipx);
- //// 使控件延中心点做y轴翻转
- //CCFlipY *flipy = CCFlipY::create(true);
- //label->runAction(flipy);
延时动画:
逐渐执行的动画,有渐变性,我们可以看到它的改变,这里只是列举几种。
- // 闪烁
- CCBlink *blink = CCBlink::create(3.0f,10);
- label->runAction(blink);
- // 颜色转变
- CCTintTo *tintto = CCTintTo::create(3.0f,255,0);
- label->runAction(tintto);
- // 从隐藏到显示
- CCFadeIn *fadein = CCFadeIn::create(3.f);
- label->runAction(fadein);
组合动作:
将多种动作组合起来播放,可同步也可异步。
- // 用序列执行异步动画,即一个一个执行,参数为NULL时,表示添加动画效果结束
- CCFiniteTimeAction *sequence = CCSequence::create(fadeout,tintto,NULL);
- label->runAction(sequence);
- // 用序列执行同步动画,全部一起执行,参数为NULL时,表示添加动画效果结束
- CCFiniteTimeAction *spawn = CCSpawn::create(fadeout,NULL);
- label->runAction(spawn);
- // 重复执行动作,参数2为执行次数
- CCFiniteTimeAction *sequence = CCSequence::create(fadeout,fadein,NULL);
- CCRepeat *repeat = CCRepeat::create(sequence,5);
- label->runAction(repeat);
- // 无限重复执行动作
- CCRepeatForever *repeatforever = CCRepeatForever::create((CCActionInterval*)sequence);
- label->runAction(repeatforever);
还有一种特殊的组合动作,用图片来播放动作,简称动画帧。
- // 帧动画,通过图片形式,一帧一帧的播放动画(这里我们有14张图片)
- CCSprite *grossini = CCSprite::create("grossini_dance_01.png");
- grossini->setPosition(s.width / 2,s.height / 2);
- this->addChild(grossini);
- // 帧数(图片的张数)
- int framecount = 15;
- // 创建动画帧
- CCAnimation *animation = CCAnimation::create();
- for (int i = 1; i < framecount; i++)
- {
- // 字符数组,存储图片名
- char str[50] = { 0 };
- // 将图片名打印到str
- sprintf(str,"grossini_dance_%02d.png",i);
- // 创建图片动画帧
- animation->addSpriteFrameWithFile(str);
- }
- // 每个动画帧的间隔时间
- animation->setDelayPerUnit(1.0f);
- // 通过setRestoreOriginalFrame来设置是否在动画播放结束后恢复到第一帧
- animation->setRestoreOriginalFrame(true);
- // 创建动画
- CCAnimate *animate = CCAnimate::create(animation);
- // 执行动画
- grossini->runAction(CCRepeatForever::create(animate));
- <pre name="code" class="cpp">/*
- * AnimationCache可以加载xml/plist文件,plist文件里保存了组成动画的相关信息,
- * 通过该类获取到plist文件里的动画。
- */
- CCSprite *grossini = CCSprite::create("grossini_dance_01.png");
- grossini->setPosition(s.width / 2,s.height / 2);
- this->addChild(grossini);
- // 获取动画缓存实例对象
- auto cache = AnimationCache::getInstance();
- // 添加动画文件到缓存,plist文件
- cache->addAnimationsWithFile("animations-2.plist");
- // 从缓存中获取动画对象
- auto animation = cache->getAnimation("dance_1");
- auto action = Animate::create(animation);
- grossini->runAction(Sequence::create(action,action->reverse(),NULL));
动作继承表: