Cocos2d-x学习笔记(七)—— 动作处理
发布时间:2020-12-14 16:23:45 所属栏目:百科 来源:网络整理
导读:动作类型 瞬时动作: 瞬间执行的动画,我们无法看到它变化的过程。 CCSize s = Director::getInstance()-getWinSize();CCLabelTTF *label = CCLabelTTF::create("windowslake","A Damn Mess",23);label-setPosition(Vec2(0,s.height / 2));this-addChild(lab
动作类型 瞬时动作: 瞬间执行的动画,我们无法看到它变化的过程。 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)); 动作继承表:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |