变速动作和复合动作类似。也是一种特殊的动作,它能够把不论什么动作依照改变后的速度运行。变速动作与复合动作最大的差别就是复合动作仅仅是单纯的组合一系列动作,而变速的做在组合一系列动作后还要去改变动作的运行速度。

变速动作主要分为2大类:Speed和ActionEase

一.Speed

用于线性地改变某个动作的速度,也就是说成倍数的改变某动作的总体速度。

Speed相当于一个包装器,将须要改变速度的动作包装到当中。

Speed类源代码能够在CCAction类中看到:

class CC_DLL Speed : public Action
{
......
static Speed* create(ActionInterval* action, float speed);
inline float getSpeed(void) const { return _speed; }
inline void setSpeed(float speed) { _speed = speed; }
......
}

能够看到。Speed类是直接继承自Action类的。其create()方法接收2个參数。第一个是其要包装的动作。必须是ActionInterval类型的动作,即简单的持续动作或复合动作,不能够是即时动作。第二个參数是一个float类型的速度值speed,这个speed就是该方法要包装的动作原来运行速度的倍数,比方speed=0.5。代表包装后速度变为原来的0.5倍,speed=2。代表包装后速度是原来速度的2倍。

举个栗子:

//创建一个sprite
auto sprite = Sprite::create("haha.jpg"); //加入
this->addChild(sprite); //创建MoveTo动作
auto _moveTo = MoveTo::create(3.0,Vec2(920,320)); //创建Speed变速动作
//參数:1.动作 2.所包装动作原来速度的倍数
auto _speed = Speed::create(_moveTo,2); //运行动作
sprite->runAction(_speed);

二.ActionEase

Speed尽管能改变动作的速度,但仅仅能按比例改变速度。ActionEase能够实现动作的速度由快到慢、速度随时间改变的运动。该类包括好多种类的缓冲运动:指数缓冲、正弦缓冲、弹性缓冲、跳跃缓冲和回震缓冲等等。每类缓冲运动基本都包括3个不同一时候期的变换:In、Out和InOut,这3个变换有是什么呢?简单来说。In是在运动起始时加速。Out是在运动快结束时减速,InOut包括两者。就是先加速后减速

我们能够先看一下ActionEase类的源代码

class CC_DLL ActionEase : public ActionInterval

这句声明能够看到,ActionEase类是继承自ActionInterval类,所以它也是一种持续动作

以下是全部种类缓冲运动的声明:

//指数缓冲
class CC_DLL EaseExponentialIn : public ActionEase
class CC_DLL EaseExponentialOut : public ActionEase
class CC_DLL EaseExponentialInOut : public ActionEase //正弦缓冲
class CC_DLL EaseSineIn : public ActionEase
class CC_DLL EaseSineOut : public ActionEase
class CC_DLL EaseSineInOut : public ActionEase //弹性缓冲
class CC_DLL EaseElastic : public ActionEase
class CC_DLL EaseElasticIn : public EaseElastic
class CC_DLL EaseElasticOut : public EaseElastic
class CC_DLL EaseElasticInOut : public EaseElastic //跳跃缓冲
class CC_DLL EaseBounce : public ActionEase
class CC_DLL EaseBounceIn : public EaseBounce
class CC_DLL EaseBounceOut : public EaseBounce
class CC_DLL EaseBounceInOut : public EaseBounce //回震缓冲
class CC_DLL EaseBackIn : public ActionEase
class CC_DLL EaseBackOut : public ActionEase
class CC_DLL EaseBackInOut : public ActionEase //贝塞尔缓冲
class CC_DLL EaseBezierAction : public ActionEase //二次缓冲
class CC_DLL EaseQuadraticActionIn : public ActionEase
class CC_DLL EaseQuadraticActionOut : public ActionEase
class CC_DLL EaseQuadraticActionInOut : public ActionEase //四次缓冲
class CC_DLL EaseQuarticActionIn : public ActionEase
class CC_DLL EaseQuarticActionOut : public ActionEase
class CC_DLL EaseQuarticActionInOut : public ActionEase //五次缓冲
class CC_DLL EaseQuinticActionIn : public ActionEase
class CC_DLL EaseQuinticActionOut : public ActionEase
class CC_DLL EaseQuinticActionInOut : public ActionEase //循环缓冲
class CC_DLL EaseCircleActionIn : public ActionEase
class CC_DLL EaseCircleActionOut : public ActionEase
class CC_DLL EaseCircleActionInOut:public ActionEase //立方缓冲
class CC_DLL EaseCubicActionIn:public ActionEase
class CC_DLL EaseCubicActionOut : public ActionEase
class CC_DLL EaseCubicActionInOut : public ActionEase

能够看出,ActionEase类提供了的各种缓冲方式的子类。每一种缓冲方式(贝塞尔缓冲除外)基本都分为In、Out和InOut三种不同一时候期的变换。

以下来举个使用ActionEase的栗子:

//创建一个sprite
auto sprite = Sprite::create("haha.jpg"); //加入
this->addChild(sprite); //创建MoveTo动作
auto _moveTo = MoveTo::create(3.0,Vec2(920,320)); //创建正弦缓冲动作
auto _sineEase = EaseSineInOut::create(_moveTo); //运行动作
sprite->runAction(_sineEase);

其它缓冲类型的动作的用法也都与上面的样例一样。仅仅是函数名不同。

话说我试了好几种,认为这么多种类的运动方式还真看不出来太大的差别,反正我认为看起来都几乎相同O(∩_∩)O哈哈~。

以上。

COCOS学习笔记--变速动作Speed和ActionEase的更多相关文章

  1. COCOS学习笔记--即时动作ActionInstant

    Cocos引擎中的动作类的关系图例如以下: 能够看出,Action是继承自Ref类的,之前我的博客中也有讲过,Ref类是cocos2dx全部类的基类.动作类(Action)是全部动作的基类.它通过cr ...

  2. COCOS学习笔记--持续动作ActionInterval

    上一篇博客介绍了即时动作ActionInstant.与即时动作相对的是持续动作ActionInterval. 顾名思义,持续动作就是须要一段时间来持续运行的动作,而且在有限时间内改变运行对象的一些属性 ...

  3. COCOS学习笔记--重力感应Acceleration

    Cocos2dx重力感应Acceleration,准确来说叫加速度计,加速度计能够感应设备上X.Y.Z轴方向上线性加速度的变化.事实上叫"重力感应"或"重力加速度计&qu ...

  4. 重温JSP学习笔记--JSP动作标签

    上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...

  5. cocos学习笔记:快速上手

    cc.Class({ //奇怪的语法风格,cc.class, extends: cc.Component, //扩展自cc.Component properties: { //类的属性设置 jumpH ...

  6. COCOS学习笔记--Cocod2dx内存管理(三)-Coco2d-x内存执行原理

    通过上两篇博客.我们对Cocos引用计数和Ref类.PoolManager类以及AutoreleasePool类已有所了解,那么接下来就通过举栗子来进一步看看Coco2d-x内存执行原理是如何的. / ...

  7. COCOS学习笔记--关于使用cocostudio打安卓包

    我在之前的博客里也写到过,如今cocos引擎提供了一键打包.很方便. 今天正好做个測试,想用引擎的一键打包弄个apk的安卓包.以下就简介一下详细过程和自己的一些理解: 先说一下项目背景,因为我的电脑是 ...

  8. COCOS学习笔记--粒子系统

    一.粒子系统的简单介绍 粒子系统是指计算机图形学中模拟特定现象的技术,它在模仿自然现象.物理现象及空间扭曲上具备得天独厚的优势,为我们实现一些真实自然而又带有随机性的特效(如爆炸.烟花.水流)提供了方 ...

  9. 1.2(学习笔记) JSP动作元素

    动作元素 jsp:useBean:根据指定类实例化一个对象,类似Preson per = new Preson(); <jsp:useBean id="对象名" class ...

随机推荐

  1. 6.12---前提两个对象的成员必须一致,才能将有数据的对象将数据传给反射获取的对象conver(有数据对象,目标对象)

    //// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)/ ...

  2. es6之iterator,for...of

    遍历器(Iterator)是一种统一的接口机制,来处理所有不同的数据结构. JavaScript 原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和 ...

  3. NX自动出图 效果图

  4. dutacm.club_1089_A Water Problem_(dp)

    题意:要获得刚好后n个'k'的字符串,有两种操作,1.花费x秒,增加或删除1个'k'; 2.花费y秒,使个数翻倍.问最少需要多少时间获得这个字符串. 思路:i为偶数个'k',dp[i]=min(dp[ ...

  5. CAD得到所有组名(网页版)

    主要用到函数说明: _DMxDrawX::GetAllGroupName 得到所有组名. js代码实现如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

  6. 基础:VS快捷键

    VS.net中快捷键收缩和展开代码段 i. Ctrl-M-O   折叠所有方法 ii. Ctrl-M-P   展开所有方法并停止大纲显示(不可以再折叠了) iii. Ctrl-M-M   折叠或展开当 ...

  7. Android 项目Log日志输出优化

    概述 Android开发过程中经常需要向控制台输出日志信息,有些人还在用Log.i(tag,msg)的形式或者system.out.println(msg)方式吗?本篇文章对日志信息输出进行优化,以达 ...

  8. manacher(马拉车)算法

    断断续续地看了两天的马拉车算法,可算是给搞明白了(贼开心),这算是自己搞懂的第一个算法了(23333333333333)这个算法照目前自己的理解来看,貌似就只能求个字符串中的回文串(接触这个算法是要求 ...

  9. Re0:DP学习之路 饭卡 HDU - 2546

    解法 01背包变式,首先贪心的想一下如果要保证余额最小那么就需要用相减后最小的钱减去之前最大的价格,且得保证这个钱在5元以上 对于寻找如何减最多能包含在5元以上,这里用01背包 我们把价钱看做体积装进 ...

  10. 山建校赛B题公式证明

    原题 证明