今早发生了一件事让我感觉特气愤!去年的这个时候,我和小伙伴们一起在操场上拍毕业照,之后有个当地报纸的记者来我们学校取材,看到我们后打算给我们拍几张创意张扬点的毕业照。之后呢,照片出来了,拍的效果大伙都非常惬意,最后这张照片还被作为湄洲日报和校报的版面。这是我大学认为最骄傲的几件事之中的一个。但是,就在今天,我发现这张照片被某市的男科医院拿去当杂志的插图,文章标题还是治疗男人xxx(不准笑,我非常严肃的)。尼玛的,我看到后二话不说直接打电话到那医院大骂一通,好在他们的认错态度还算诚恳,所以我也没过分追究。本来这件事也就结束了,谁知道当地一个破论坛为了炒作又把这事给发了出来,我又尼玛了!打电话过去还挂我电话!假设我是黑客看我不把你的论坛给黑了!

---------------
喝口水,缓下气。
这篇介绍的就真的是纯技巧性的东西了,没有啥知识点。先几句自问自答,又名:抛砖引玉。
1、假设要让你个精灵先移动到某个坐标,然后再旋转,该如何实现呢?
答:当然是使用Sequence了,疗效过,效果好!
2、假设想让一个对象的动画播放完后,另外一个对象接下去播放
答:这个的实现方法就比較多了,用TargetedAction 或者 Callfunc 等,都是能够的;
3、假设想让多个对象安卓不同的时间段播放,那么该怎么做呢? 答:那就用多个Callfunc或者TargetedAction。假设你是这么回答的话,那我也仅仅能呵呵了,有人会说用ActionManage,这个我没怎么去用过,这样也就不方便多说啥。以下介绍第二种可行的方案。那就是用Array与Dictionary的组合。首先将运行的动作tag和动作的运行对象tag放入Dictionary中,再将Dictionary放入Array中,最后在Array中来个for语句循环播放动画

示比例如以下:

继续我们的主角:boy,girl,girl_3。
程序流程是:当boy 移动到girl旁边时调戏了girl一下,girl又气又恼,原地跳动了一下;之后boy又去找girl_3(真是花心啊),
相同的招数用在girl_3上,girl_3不仅不在意,反而非常高兴的原地转了一圈。

1、先自己定义一个函数来创建出我们所须要的三个动作,通过传入的整型參数来获取对应的动作

Sequence* HelloWorld::getAction(int action_tag)
{
if(1 == action_tag)//移动
{
return Sequence::create(MoveTo::create(1.0f,Point(300,200)),
CallFunc::create(CC_CALLBACK_0(runMyAction,this)),//调用runMyAction播放下一个动画
NULL);
}
else if(2 == action_tag)//跳跃
{
return Sequence::create(JumpBy::create(1.0f,Point(350,200),20,2),
CallFunc::create(CC_CALLBACK_0(runMyAction,this)),
NULL);
}
else if(3 == action_tag)//旋转
{
return Sequence::create(RotateBy::create(1.0f,360),
CallFunc::create(CC_CALLBACK_0(runMyAction,this)),
NULL);
}
else
{
CCLOG("the action_tag is out of range");
return NULL;
}
}

2、创建对象,初始化array与Dictionary

bool HelloWorld::init()
{
auto boy = Sprite::create("boy.png");
boy->setPosition(Point(100,100));
this->addChild(boy,1); auto girl = Sprite::create("girl_1.png");
girl->setPosition(Point(100,100));
this->addChild(girl,1); auto girl_3 = Sprite::create("girl_3.png");
girl_3->setPosition(Point(100,100));
this->addChild(girl_3,1); //以下初始化Array与Dictionary,之后将对象与动作放进入
auto action_array = Array::create();
action_array->retain(); auto dic1 = Dictionary::create();
auto dic2 = Dictionary::create();
auto dic3 = Dictionary::create(); dic1->setObject(boy,"sp");
dic1->setObject(Integer::create(1),"action");//之行的动作tag为1,
action_array->addObject(dic1); dic2->setObject(girl,"sp");
dic2->setObject(Integer::create(2),"action");
action_array->addObject(dic2); dic3->setObject(girl_3,"sp");
dic3->setObject(Integer::create(1),"action");
action_array->addObject(dic3); action_idx = 0;//初始化为0,播放动画时使用 //播放动画
this->runMyAction();//runMyAction是自己定义函数,用来播放数组中的动画 return true;
}

3、播放动画的函数

void HelloWorld::runMyAction()
{
action_idx++;//动作下标+1 if(action_idx > action_array->count())
return;//最后一个动画已播放完,结束播放动画 auto dic = static_cast<Dictionary*>(action_array->getObjectAtIndex(action_idx));//通过action_idx从array取出对应的字典
auto sp = static_cast<Sprite*>(dic->objectForKey("sp"));//取出要播放动画的对象
auto act_tag = static_cast<Integer*>(dic->objectForKey("action"));//取出要播放的动画tag auto act = getAction(act_tag->getValue());//通过动作的tag从getAction函数中取出对应的动作出来 sp->runAction(act);
}

恩,就是这样子,事实上我也没运行过,这里仅仅是给小伙伴们展示一种可行的播放动画方式。假设你有其它的办法也能够拿出来交流交流。
这篇写的挺乱的,可能与今天较为急躁的心情有关。挺早就想写这篇博文了,仅仅是一直抽不出时间,所以今晚再如何也要写好。近来也确实比較忙。呼呼

尊重原创,转载请注明来源:http://blog.csdn.net/star530/article/details/25007815

Cocos2dx 小技巧(十二) 一种可行的系列动画播放方式的更多相关文章

  1. STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  2. k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建

    更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...

  3. PHP开发小技巧②—实现二维数组根据key进行排序

    在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要的结果:但是,有的时候我们却不能通过使用内置函数实现我们的要求,这就需要我们自己去编写算法来 ...

  4. 干货分享:小技巧大用处之Bean管理类工厂多种实现方式

    前言:最近几个月很忙,都没有时间写文章了,今天周末刚好忙完下班相对早点(20:00下班)就在家把之前想总结的知识点写出来,于是就有了这篇文章.虽无很高深的技术,但小技巧有大用处. 有时我们经常需要将实 ...

  5. Cocos2dx 小技巧(十六)再谈visit(getDescription)

    之前两篇都是介绍与Value相关的,这篇我继续这个话题吧,正好凑个"Value三板斧系列...".在非常久非常久曾经.我用写过一篇博客,关于怎样查看CCArray与CCDictio ...

  6. Cocos2dx 小技巧(十四)ScrollView实现缩放效果

    这阶段心绪比較乱,所以这篇开头就不扯淡了.(谁说大姨夫来了我跟谁急!~~)说到大姨夫我突然想到英雄联盟有个美女讲解叫伊芙蕾亚,她的堂弟ID居然叫:姨夫累呀,好笑吧(呵呵,有点冷~~额,我都说不扯淡了) ...

  7. Cocos2dx 小技巧(十五)话说ScrollView的delegate实现过程

    附:本文參加了CSDN博客大赛.亲假设认为这篇文章不错,就大胆的来投上一票吧! !!http://vote.blog.csdn.net/Article/Details? articleid=34140 ...

  8. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十二 || 三种跨域方式比较,DTOs(数据传输对象)初探

    更新反馈 1.博友@落幕残情童鞋说到了,Nginx反向代理实现跨域,因为我目前还没有使用到,给忽略了,这次记录下,为下次补充.此坑已填 2.提示:跨域的姊妹篇——<三十三║ ⅖ 种方法实现完美跨 ...

  9. Cocos2dx 小技巧(十三)聊聊坐标系

    一好友考上了空姐.她说:以后基本上不会回来了.等下次见面时请叫我白富美!尽管有点羡慕.但我依然不甘示弱回复:下次见面时请叫我高富帅! 未来,谁说得准呢? ------------------有段时间没 ...

随机推荐

  1. 继承—people

    public class People { private double height;//身高 private double weight;//体重 public double getHeight( ...

  2. VS 代码打包工具

    源代码下载地址 https://github.com/loresoft/msbuildtasks

  3. IE11 补丁 KB2929437[已过期]

    2014年4月 请更新此补丁 KB2929437 开发人员工具有重要更新 DOM 面板右侧新增 "更改"面板,用于记录调试时修改的 CSS Rules: JS 调试面板,新增 so ...

  4. 一些标签库的学习和do的讨论

    JSTL 核心标签库http://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html .do的讨论http://bbs.csdn.net/t ...

  5. php重新编译,gd扩展支持jpeg文件

    晚上写东西的时候,报了一个错误: Call to undefined function imagecreatefromjpeg() 没有开启 jpeg 支持?原来是默认安装的 gd 扩展默认不支持 j ...

  6. Java 调用对象方法的执行过程

    弄清调用对象方法的执行过程十分重要.下面是调用过程的详细描述: 1) 编译器查看对象的声明类型和方法名.假设调用x.f(param),且隐式参数x声明为C类的对象.需要注意的是:有可能存在多个名为f, ...

  7. 首家5G体验厅在深圳建成

    日前,深圳移动卓越时代营业厅推出5G全方位体验活动,让市民亲身感受5G时代到来.据悉,十大5G展示项目生动展现移动5G带来的生活巨变与产业升级,为5G发展汇聚各界力量加速创新落地. 现场有市民表示,5 ...

  8. Win10平台下通过VMware虚拟机安装Win7、Ubuntu、Mac

    1.安装VMware14.1.1 下载地址:https://download.csdn.net/download/jasonczy/10611423 产品秘钥: CG54H-D8D0H-H8DHY-C ...

  9. 洛谷 P1294 高手去散步

    P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始 ...

  10. hdu 1024 最大m子段和

    注:摘的老师写的 最大m子段和问题 以-1 4 -2 3 -2 3为例最大子段和是:6最大2子段和是:4+(3-2+3)=8所以,最大子段和和最大m子段和不一样,不能用比如先求一个最大子段和,从序列中 ...