文档章节

Cocos2d-x-v3动作体系

珲少
 珲少
发布于 2015/08/05 14:26
字数 1286
阅读 156
收藏 0

Cocos2d-x-v3动作体系

        cocos2d-x-v3版本v2的版本有的很大的改动,最直观的是在一些函数的改动和类名的改动上,首先以CC开头的类,都不再使用CC。在我个人的理解上,原来的cocos2d-x是完全从iphone的框架cocos2d移植过来的,代码的风格和编程的思想都及类似于Object-C,除了语法是C++的外,其他就像是OC版的翻译,新的版本更好的体现了跨平台的特性,也更多的运用了C++的一些编码思想和语言特点,更易于各平台的开发者使用。这篇博客的主要内容,是总结cocos2d中行为动作的处理方法和相关函数。

一、瞬时动作

        这类行为只能称为动作,不能称作动画,其执行是瞬时的,没有可是化的过程。

        cocos2d中常用的瞬时动作有如下几种:

      FlipX:关于x轴做镜像变换。

      FlipY:关于y轴做镜像变换。

      Hide:隐藏。

      Show:显示。

      ToggleVisibility:切换隐藏和显示。

      Place:将对象放置在某个位置。

二、延时动作

       延时动作就是动画,将动作的过程展现出来,cocos2d引擎中的几种延时动作如下:

       1. MoveTo:将对象移动到某一位置,是绝对位置,移动后不会记录对象的原始位置,动作不能进行反转。例如:

auto action = MoveTo::create(2, Vec2(100, 100));//2S时间移动到(100,100)
    label->runAction(action);//执行动作

        2.MoveBy:将对象相对现在的位置移动某个距离,这个移动是相对对象当前位置的,可以反转。

      3.JumpTo:和MoveTo类似,对象跳动到某一位置,例如:

label->runAction(JumpTo::create(2, Vec2(100, 100), 30, 3));//对象在2S内跳三次,每次高度为30像素,跳到(100,100)点

       4.JumpBy:和MoveBy类似。

        5.BezierTo:以贝塞尔曲线的方式移动到某一位置,例如:

ccBezierConfig config;
    config.controlPoint_1=Vec2(300, 300);
    config.controlPoint_2=Vec2(200,200);
    config.endPosition=Vec2(100, 100);//设置两个中间点和一个终点
    
    label->runAction(BezierTo::create(2, config));//2S时间通过贝塞尔曲线方式移动

        6.BezierBy:以贝塞尔曲线的方式进行相对移动。

      7.ScaleTo:相对原始大小缩放到某一尺度。

      8.ScaleBy:相对目前大小进行缩放。

      9.RotateTo:相对原始状态旋转到某一角度。

      10.RotateBy:相对目前转台旋转某个角度。

      11.Blink:闪烁动画。

      12.TintTo:颜色转化到某一色值

      13.TintBy:相对目前色值,颜色相对转变某一色值。

      14.FadeTo:变暗到某一透明度

      15.FadeIn:淡入动作

      16.FadeOut:淡出动作

三、动作的组合方式

        cocos2d中不仅为我们提供的各种动作方式,也为我们提供了相关的类用于管理这些动作:

     1.动作序列Sequence:这个类可以创建一个动作序列,按序列中动作的顺序依次执行动作,如下:

 Sequence * sq= Sequence::create(TintTo::create(2, Color3B(123, 123, 123)),RotateTo::create(2, 30), NULL);
    label->runAction(sq);//创建动作序列,使对象执行先变颜色,在旋转的动画

      2.同步动作组Spawn:这个类和Sequence类似,只是他里面的动画会同时一起执行。

    3.有限次的循环动作Repeat:这个类可以使某一动作循环执行数次,例如:

Repeat * re = Repeat::create(RotateBy::create(2, 30), 5);//旋转5次30度
    label->runAction(re);

    4.无限次循环动作RepeatForever:

RepeatForever * ref = RepeatForever::create(RotateBy::create(2, 30));
    label->runAction(ref);

    5.帧动画

cocos2d中同样提供了对帧动画的支持:

   //创建设置精灵
    Sprite * spr = Sprite::create( "CloseNormal.png");
    spr->setPosition(Vec2(100, 100));
    //创建两帧精灵图片
    SpriteFrame * frame1 = SpriteFrame::create("CloseNormal.png", Rect(0, 0, 50, 50));
    SpriteFrame * frame2 = SpriteFrame::create("CloseSelected.png", Rect(0, 0, 50, 50));
    Vector<SpriteFrame *>  arr;
    arr.pushBack(frame1);
    arr.pushBack(frame2);
    //创建动画体 第一个参数是帧容器,第二个是每一帧的播放时间,第三个是循环次数
    Animation * ani = Animation::createWithSpriteFrames(arr, 1, 1);
    //创建动作
    Animate *ant = Animate::create(ani);
    RepeatForever * ref = RepeatForever::create(ant);
    spr->runAction(ref);
    this->addChild(spr);

    6.反转动画

可以通过reverse方法获取动作的反转动作,例如:

auto label = Label::createWithTTF("Hello World", "fonts/arial.ttf", 24);
    MoveBy * move = MoveBy::create(3, Vec2(100, 100));
    Sequence * sq = Sequence::create(move,move->reverse(), NULL);
    label->runAction(sq);
    //label 会先相对移动(100,100),再反移动回来

    7.动作的速度控制

通过一些速度相关的类,cocos2d可以很轻松的创建出各种线性与非线性的动作。例如:

auto label = Label::createWithTTF("Hello World", "fonts/arial.ttf", 24);
    MoveTo * move = MoveTo::create(3, Vec2(-200, -200));
    EaseIn* an = EaseIn::create(move, 5);
    label->runAction(an);
//label的运动会先慢后快,速度差为5倍

EaseIn:由慢变快,线性

EaseOut:由快变慢,线性

EaseInOut:由慢变快再由快变慢

EaseSineIn:由慢变快,正弦规律

EaseSineOut:由快变慢,正弦规律

EaseSineInOut:由慢变快再由快变慢,正弦规律

EaseExponentialIn:由慢变快,指数规律

EaseExponentialOut:由快变慢,指数规律

EaseExponentialInOut:由慢变快再由快变慢,指数规律

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

© 著作权归作者所有

珲少

珲少

粉丝 886
博文 394
码字总数 475753
作品 0
上海
程序员
私信 提问
Cocos2d-x-v3坐标体系

Cocos2d-x坐标体系 cocos2d引擎是一款非常优秀的扩平台的游戏开发引擎,在apple游戏榜上,有很多排名靠前的游戏都是由他创造出来的,他也有一套十分方便的坐标体系。 一、UI坐标体系 UI坐标体...

珲少
2015/08/03
294
0
Cocos2d-x-v3中3D网格特效动画的应用

Cocos2d-x-v3中3D网格特效动画的应用 一、网格特效的使用原理 基础的动作是对节点整体进行移动,变形等操作,网格特效的原理是将节点分割成多个尺寸相同的网格,根据改变每个网格块的属性使整...

珲少
2015/08/06
811
0
购买李宁Cocos2d-x套餐,送最新出的《Cocos2d-x游戏实战指南》签名书一本

活动时间:2016-10-18至2016-11-30 通过本套餐,可完全了解Cocos2d-x 3.x的相关技术,以及掌握C++语言,并具有一定的项目实战经验。 Cocos2d-x游戏开发套餐:http://edu.51cto.com/pack/vie...

androidguy
2018/06/29
0
0
跟着石头哥哥学cocos2d-x(二)---2dx跨平台编译以及2dx概述

ps:目录是2dx概述!!! 上一节中我大概简述了2dx引擎环境的搭建,在交叉编译一概而过,这一节我将详细说下这方面的内容, 有人提出不用cygwin来编译,用adt毫无压力,额 我只想说 adt从我搞...

石头哥哥
2013/11/13
2.8K
8
7月22日至7月26日 学习总结

1. 笔记 Cocos2d-x 学习笔记(6) Sprite SpriteFrameCache Texture2D TextureCache Cocos2d-x 学习笔记(7) 内存管理 Sprite SpriteFrame Texture2D Cocos2d-x 学习笔记(8) ActionManager Coc......

深潮
07/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

深入理解表单脚本系列第二篇——表单字段

本文转载于:专业的前端网站➜深入理解表单脚本系列第二篇——表单字段 前面的话   表单字段又叫表单元素,表示表单所包含控件,如<input>、<select>等。本文将详细介绍表单字段的内容 访问...

前端老手
11分钟前
1
0
前端技术之:常用webpack插件

1、html-webpack-plugin Simplifies creation of HTML files to serve your webpack bundles. 主页地址: https://github.com/jantimon/html-webpack-plugin 安装方法: npm i --save-dev h......

popgis
16分钟前
4
0
IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1

HTML5拥有多个新的表单输入类型,这些新特性提供了更好的输入控制和验证。并不是所有的主浏览器都支持新的input类型,不过我们可以在所有的主浏览器中使用它们,即使不被支持,仍然可以显示为...

老码农的一亩三分地
17分钟前
2
0
规则引擎

解决问题 版本迭代速度更不上业务变化,但是若多个业务同时变化,除了为每个业务设计专属配置项也不利于操作。就想服务接口单纯化,将复杂多变的业务逻辑交给规则引擎,让用户在web端或cs端自...

无极之岚
54分钟前
7
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
今天
601
10

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部