动作类型
瞬时动作:
瞬间执行的动画,我们无法看到它变化的过程。
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));
动作继承表: