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

变速动作主要分为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. 01按照官方步骤编译NanoPiM1Plus的Android

    01按照官方步骤编译NanoPiM1Plus的Android 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/6 10:58 版本:V1.0 ...

  2. C语言常见问题总结

    1.多次运行程序 解决方法: 错误原因是,已经编译运行出一个exe,没有关闭此exe,又点击编译运行. 应该将之前运行出的exe关闭,再来运行代码 2.单精度类型和双精度类型如何区分使用... 解决方 ...

  3. Pyhton TestCase运行闪退与失败,原因不详。。。

    把源码贴上来,希望某位大神可以指点迷津: """Unit test for odbchelper.py This program is part of "Div ...

  4. canvas一周一练 -- canvas绘制饼图(3)

    运行效果: <!DOCTYPE html> <html> <head> </head> <body> <canvas id=" ...

  5. jquery.ajax之beforeSend方法使用介绍

    常见的一种效果,在用ajax请求时,没有返回前会出现前出现一个转动的loading小图标或者“内容加载中..”,用来告知用户正在请求数据.这个就可以用beforeSend方法来实现. 下载demo:a ...

  6. iOS App Crash原理分析

    预备知识:OS X系统分析 1.内核XNU是Darwin的核心,也是整个OS X的核心.XNU本身由以下几个组件构成: Mach微核心 BSD层 libKern I/O Kit 此外,内核是模块化的, ...

  7. 集合:ListIterator

    why ? when ? how ? what ? Java 集合框架图 有了 Iterator 为什么还要有 ListIterator 呢? Iterator 遍历的时候如果你想修改集合中的元素怎么 ...

  8. Oracle的shutdown命令

    oracle的shutdown命令用来关闭当前实例,有4个可选参数:normal.transactional.immediate和abort.不带参数时默认是normal.这几个参数的差异体现在以下几 ...

  9. Django ContentType内置组件

    一.引出问题 假如有这两张表,它们中的课程可能价格不一样.周期不一样.等等...不一样...,现在有一张价格策略表,怎么就用一张表报保存它们之间不同的数据呢? 可能你会这样: 确实是行!但是,如果有很 ...

  10. iframe使用大全

    <iframe src=”you page’s url” width=”100″ height=”30″ frameborder=”no” border=”0″ marginwidth=”0″ ...