动画是游戏中最重要的表现部分,本篇仅仅是初步学习大部分动画的用法。没有什么原理性的东西,可是样例有非常多,假设有不熟的地方要练一下。 特别是Spawn和Sequence的组合使用,什么时候使用Spawn,什么使用使用Sequence,怎么在它们之间相互嵌套对方。用光你的脑细胞尽力的去折磨这几个函数吧!

做出尽可能多的绚丽的组合!

动画方法

动画的方法都在Node中,它的子类包含Layer、Sprite、MenuItem等。
runAction 启动动画
stopAction 停止动画
stopActionByTag 依据tag停止动画
……

动画原理

创建好动作animation,在须要运行动作的地方运行runAction来对其加入动画。
动画原理暂不做深入研究,后面做项目完好。


经常使用动画

Fade(In, Out)
Move(To,By)
Jump(To,By)

eg:
使某个精灵随机移动到屏幕上的某个点(注意均速运动)
游戏中有二级跳,怎样实现

Blink 闪烁
Sequence 组合序列。动作依次运行,注意參数以NULL结尾。
DelayTime 延时运行

eg:
设计一动画序列,平移200后。延时1秒后再分4次跳回。


Rotate(To,By)环绕锚点(AnchorPoint)旋转
Scale(To,By)缩放动画,s为放大缩小比例
Spawn组合并行动画,动作同一时候运行。注意參数以NULL结尾


eg:
设计一动画。使背景旋转放大后充满屏幕
设计一动画序列,向前旋转移动300像素后,平移100,然后再跳跃100.

动画回调

CallFunc  与sequence组合使用
CallFuncN

eg:
4个精灵在中心位置先后移动到屏幕的4个角。
//4个精灵在中⼼位置先后移动到屏幕的4个⾓
void SecondaryJump:: FourSprites (cocos2d :: Ref * ref )
{
auto act = Sequence :: create( MoveTo ::create (1, Point(10, 10)), CallFuncN ::create ([=]( Node * node ){
sp5 ->runAction ( Sequence:: create (MoveTo :: create(1, Point (10, 630)), CallFuncN :: create([=]( Node * node ){
sp6 ->runAction ( Sequence:: create (MoveTo :: create(1, Point (950, 630)), CallFuncN :: create([=]( Node * node ){
sp7 ->runAction ( Sequence:: create (MoveTo :: create(1, Point (950, 10)), nullptr ));
}), nullptr ));
}), nullptr ));
}), nullptr );
sp4-> runAction (act );
}


动画回调加音效
     //动画回调
auto callFunc = CallFuncN :: create([=]( Node * node )
{
node ->setVisible ( false);
}); auto act = Sequence :: create( Spawn ::create ( RotateTo:: create (2, 720), MoveBy :: create(2, Point (100, 0)), nullptr ), \
MoveBy ::create (1, Point(100, 0)), JumpBy ::create (0.2f, Point(0, 0), 100, 1), callFunc ,\
CallFuncN ::create ([=]( Node * node ){ \
CocosDenshion :: SimpleAudioEngine:: sharedEngine ()->playBackgroundMusic ( "music/game_music.wav", true ); }),
nullptr ); sp2-> runAction (act );

其它动画

循环动画

Repeat、RpeatForever
//实现一个菜单button的抖动。 像那种输入账号password错误后。输入框抖动报错。
在MenuItem的回调函数中这样写,事实上就是  左下 左上 右上 右下高速反复移动六次:
void SecondaryJump:: Jump (cocos2d :: Ref * ref )
{
MenuItemFont * item = (MenuItemFont *) ref;
auto repeatAct = Repeat :: create( Sequence ::create ( MoveBy:: create (0.01f, Point (3, 3)), MoveBy ::create (0.01f, Point(-3, -3)), MoveBy ::create (0.01f, Point(3, -3)), MoveBy ::create (0.01f, Point(-3, 3)), nullptr ), 6);
item-> runAction (repeatAct );
}

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFuYmluZ2Zlbmd5aW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

帧动画Animate

贝塞尔曲线

void FrameAnimation:: Morning_0623 (cocos2d :: Ref * ref )
{
auto animation = Animation :: create();
for ( int i = 2; i <= 6; i ++)
{
String fileName = StringUtils:: format ("coc/characters_lowres/%d.0.png" , i);
animation ->addSpriteFrameWithFileName ( fileName. getCString ()); }
animation-> setDelayPerUnit (0.05f);
animation-> setLoops (-1);
auto animate = Animate :: create( animation ); auto pArr = PointArray :: create(5);
pArr-> addControlPoint (Point (100, 0));
pArr-> addControlPoint (Point (100, 200));
pArr-> addControlPoint (Point (300,200));
pArr-> addControlPoint (Point (300, 400));
auto move = CardinalSplineBy :: create(5, pArr , 1);
auto act = Spawn :: create( animate , move , nullptr); ccBezierConfig bezierCon ;
bezierCon. controlPoint_1 =CCPointMake (200, 150); //控制点1
bezierCon. controlPoint_2 =CCPointMake (200, 160); //控制点2
bezierCon. endPosition =CCPointMake (540, 100); // 结束位置
sp-> runAction (Spawn :: create( act , BezierBy :: create(3, bezierCon ), nullptr ));
}

eg:

      屏幕上有10个精灵随机移动,精灵有对应的随机血量,相碰后血量少的精灵消失。最后仅仅剩下最后一个精灵。(考虑精灵封装成Enemy类)
      代码分析:我的代码中SpriteHW、SpriteHWT、AnimationHW这三个类。这道题的难度在于精灵碰撞检測后的删除。详细的能够參考AnimationHW的update。

使用C++自身的vector,没有在遍历的时候进行删除,而是标记删除。

在检測碰撞完成后再遍历一次vector对标记删除的元素进行删除。

      关于精灵随机位置的问题,使用rand会有每次执行随机数都一样的问题。这里给它加入一个随机种子。仅仅要在init()里面加入一句srand((unsigned)time(NULL));就可以每次随机不一样的数字。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFuYmluZ2Zlbmd5aW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">





如今cocos2dx还没支持中文,我还没有找到好的unicode等转码的好的开源码,能力有限不想自己写搞得代码非常乱,囧。


代码SVN同步地址(假设哪天没有了,见谅,可能不续费了):https://www.svnchina.com/svn/lanou

cocos2dx 3.1从零学习(五)——动画的更多相关文章

  1. cocos2dx 3.1从零学习(二)——菜单、场景切换、场景传值

    回想一下上一篇的内容,我们已经学会了创建一个新的场景scene,加入sprite和label到层中.掌握了定时事件schedule. 我们能够顺利的写出打飞机的主场景框架. 上一篇的内容我练习了七个新 ...

  2. cocos2dx 3.1从零学习(一)——入门篇(一天学会打飞机)

    没办法,浏览这么高,为啥没人投票呢?朋友们,我这篇文章參加了csdn博文大赛.喜欢的来点个赞吧!点击:http://vote.blog.csdn.net/Article/Details?article ...

  3. cocos2dx 3.1从零学习(三)——Touch事件(回调,反向传值)

    第三讲 Touch 前面两篇我们学习的内容,足够我们做一款简单的小游戏.也能够说,我们已经入门了,能够蹒跚的走路了. 本篇将解说cocos2dx中非常重要的touch回调机制.你肯定记得第一章做定时器 ...

  4. cocos2dx 3.1从零学习(四)——内存管理(错误案例分析)

    本篇内容文字比較较多,可是这些都是建立在前面三章写代码特别是传值的时候崩溃的基础上的.可能表达的跟正确的机制有出入,还请指正. 假设有不理解的能够联系我.大家能够讨论一下,共同学习. 首先明白一个事实 ...

  5. cocos2dx 3.1从零学习(六)——CocosStudio(VS2013project导入及环境设置)

    导入libCocosStudio.libExtensions.libGUI 新建的project例如以下图: 加入现有项目 右键解决方式.例如以下操作: watermark/2/text/aHR0cD ...

  6. SVG 学习<五> SVG动画

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  7. es6从零学习(五):Module的语法

    es6从零学习(五):Module的语法 ES6 模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量 一:es6模块化和 CommonJS 和 AMD 模块 (运行 ...

  8. TweenMax动画库学习(五)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  9. iOS学习——核心动画

    iOS学习——核心动画 1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用.核心动画所在的位置如下图 ...

随机推荐

  1. Android -- SDcard文件读取和保存

    背景                                                                                            一些东西可以 ...

  2. MATLAB数据处理快速学习教程

    转自:http://blog.csdn.net/abcjennifer/article/details/7706581 本篇内容集合了MATLAB中的基本操作.数据存储与计算.数据的直线与曲线拟合与画 ...

  3. python 初步学习

    疑惑1:windows下的python  如何设置显示汉字 推荐几个学习网址,也方便自己以后查看: http://pmghong.blog.51cto.com/3221425/d-10 www.w3c ...

  4. POJ2762 Going from u to v or from v to u? 强连通+缩点

    题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足   随意两点ab 都能 从a到达b 或  从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...

  5. ArcGIS安装问题集锦

    1. 软件安装 软件下载.安装问题自行解决,否则就不要使用. 2. 常见问题 2.1 许可管理器版本不正确 2013年3月19日 问题一:ArcGIS10安装后,更改许可管理器时,通常,在ArcGIS ...

  6. poj 2486 Apple Tree (树形背包dp)

    本文出自   http://blog.csdn.net/shuangde800 题目链接: poj-2486 题意 给一个n个节点的树,节点编号为1~n, 根节点为1, 每个节点有一个权值.    从 ...

  7. 修改MySQL数据文件的位置

    1:查看MySQL服务名称 2:管理员启动控制台 3:修改配置文件my.ini中数据文件的位置,[注]修改完成之后要把响应的数据文件从旧目录拷贝到新目录当中. 4:重新启动服务 5:登录数据库查看数据 ...

  8. git删除本地的资源,如何恢复?

    1.$ git reset --hard HEAD  将提交重置 2.使用 $ git checkout TestTimer.java(文件名) 恢复过来了

  9. 记录规则 – 销售只能看到自己的客户,经理可以看到全部

    OpenERP中的权限管理有四个层次: 菜单级别: 即,不属于指定菜单所包含组的用户看不到该菜单.不安全,只是隐藏菜单,若用户知道菜单ID,仍然可以通过指定URL访问 对象级别: 即,对某个对象是否有 ...

  10. Android 英文文档下载地址

    通过英文Android API学习Android技术是一个不错选择,当然养鸡的专业户要小心了,以下分享一些下载英文文档的链接(请使用迅雷下载): https://dl-ssl.google.com/a ...