动作类Action是一切动作的祖先类。它有三个直接继承子类:

  1. FiniteTimeAction受时间限制的动作;
  2. Follow精灵跟随精灵的动作;
  3. Speed运动速度控制;

而FiniteTimeAction又有两个直接子类:分别是ActionInstant和ActionInterval,顾类名而思意。

瞬时动作即立即执行动作,下边是其使用示例:

void MyAction::goMenu(cocos2d::Ref *pSender)
{
log("Tag = %i", this->getTag());
Size size = Director::getInstance()->getVisibleSize();
Vec2 p = Vec2(CCRANDOM_0_1()*size.width, CCRANDOM_0_1()*size.height); switch (this->getTag())
{
case PLACE_TAG:
sprite->runAction(Place::create(p));// Places the node in a certain position
break;
case FLIPX_TAG:
sprite->runAction(FlipX::create(true));// Flips the sprite horizontally
break;
case FLIPY_TAG:
sprite->runAction(FlipY::create(true));// Flips the sprite vertically
break;
case HIDE_SHOW_TAG:
if (hiddenFlag)
{
sprite->runAction(Hide::create());// Hide the node
hiddenFlag = false;
}
else
{
sprite->runAction(Show::create());// Show the node
hiddenFlag = true;
}
break;
case TOGGLE_TAG:
sprite->runAction(ToggleVisibility::create());// Toggles the visibility of a node
break;
default:
break;
}
} void MyAction::backMenu(cocos2d::Ref *pSender)
{
auto sc = HelloWorld::createScene();
// Slide in the incoming scene from the left border.
auto reScene = TransitionSlideInL::create(1.0f, sc);
Director::getInstance()->replaceScene(reScene);
}

在goMenu()函数中的动作类都是ActionInstant的子类;

void HelloWorld::OnClickMenu(cocos2d::Ref *pSender)
{
MenuItem *nmitem = (MenuItem*)pSender; auto sc = Scene::create();
auto layer = MyAction::create();
layer->setTag(nmitem->getTag());// set layer's tag, and this should be the most important part in this func. sc->addChild(layer); auto reScene = TransitionSlideInR::create(1.0f, sc);
Director::getInstance()->replaceScene(reScene);
}

运行结果:

图1 HelloWorld层

图2 MyAction层

注意:这里的聚焦貌似没那么准确。

以下为间隔动作的使用示例:

void MyAction::goMenu(cocos2d::Ref *pSender)
{
log("Tag = %i", this->getTag());
Size size = Director::getInstance()->getVisibleSize(); ccBezierConfig bezier; switch (this->getTag())
{
case kMoveTo:
// 第一个参数为移动持续时间,第二个参数为目标位置
sprite->runAction(MoveTo::create(,Vec2(size.width-, size.height-)));
break;
case kMoveBy:
sprite->runAction(MoveBy::create(,Vec2(-, -)));
break;
case kJumpTo:
// 第一个参数为持续时间,第二个参数为目标位置,第三个参数为高度,第四个参数为跳跃次数
sprite->runAction(JumpTo::create(,Vec2(, ), , ));
break;
case kJumpBy:
sprite->runAction(JumpBy::create(,Vec2(, ),,));
break;
case kBezierBy:
bezier.controlPoint_1 = Vec2(, size.height/);
bezier.controlPoint_2 = Vec2(, -size.height/);
bezier.endPosition = Vec2(, );
sprite->runAction(BezierBy::create(, bezier));
break;
case kScaleTo:
// 第一个参数为持续时间,第二个参数为缩放比例
sprite->runAction(ScaleTo::create(, ));
break;
case kScaleBy:
sprite->runAction(ScaleBy::create(, 0.5));
break;
case kRotateTo:
// 第一个参数为持续时间,第二参数为旋转角度
sprite->runAction(RotateTo::create(, ));
break;
case kRotateBy:
sprite->runAction(RotateBy::create(, -));
break;
case kBlink:
// 第一个参数为持续时间,第二个参数为闪烁次数
sprite->runAction(Blink::create(, ));
break;
case kTintTo:
// 第一个参数为持续时间,剩余参数对应RGB
sprite->runAction(TintTo::create(, , , ));
break;
case kTintBy:
sprite->runAction(TintBy::create(0.5, , , ));
break;
case kFadeTo:
// 第一个参数为持续时间,第二个参数为不透明度(百分数)
sprite->runAction(FadeTo::create(, ));
break;
case kFadeIn:
sprite->setOpacity();// 0~255,0位完全透明
// 参数为持续时间
sprite->runAction(FadeIn::create());
break;
case kFadeOut:
sprite->runAction(FadeOut::create());
break;
default:
break;
}
}

动作的速度控制示例:

void MyAction::goMenu(Ref* pSender)
{
log("Tag = %i",this->getTag());
FiniteTimeAction * ac1 = (FiniteTimeAction *)MoveBy::create(, Vec2(, ));
FiniteTimeAction * ac2 = ((FiniteTimeAction *)ac1)->reverse(); ActionInterval * ac = Sequence::create(ac1, ac2, NULL); switch (this->getTag()) {
case kEaseIn:
// 3倍速度由慢至快
sprite->runAction(EaseIn::create(ac, ));
break;
case kEaseOut:
sprite->runAction(EaseOut::create(ac, ));
break;
case kEaseInOut:
sprite->runAction(EaseInOut::create(ac, ));
break;
case kEaseSineIn:
// 采用正弦变换由慢至快
sprite->runAction(EaseSineIn::create(ac));
break;
case kEaseSineOut:
sprite->runAction(EaseSineOut::create(ac));
break;
case kEaseSineInOut:
sprite->runAction(EaseSineInOut::create(ac));
break;
case kEaseExponentialIn:
// 采用指数变换速度由慢至快
sprite->runAction(EaseExponentialIn::create(ac));
break;
case kEaseExponentialOut:
sprite->runAction(EaseExponentialOut::create(ac));
break;
case kEaseExponentialInOut:
sprite->runAction(EaseExponentialInOut::create(ac));
break;
case kSpeed:
// 随机变换速度
sprite->runAction(Speed::create(ac, (CCRANDOM_0_1() * )));
break;
}
}

Cocos2d-x学习笔记(十一)动作的更多相关文章

  1. python3.4学习笔记(十一) 列表、数组实例

    python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...

  2. Go语言学习笔记十一: 切片(slice)

    Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

  3. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  4. SharpGL学习笔记(十一) 光源创建的综合例子:光源参数可调节的测试场景

    灯光的测试例子:光源参数可以调节的测试场景 先看一下测试场景和效果. 场景中可以切换视图, 以方便观察三维体和灯光的位置.环境光,漫射光,镜面反射光都可以在四种颜色间切换. 灯光位置和摄像机位置(Lo ...

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

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

  6. java jvm学习笔记十一(访问控制器)

     欢迎装载请说明出处: http://blog.csdn.net/yfqnihao/article/details/8271665 这一节,我们要学习的是访问控制器,在阅读本节之前,如果没有前面几节的 ...

  7. SQLite学习笔记(十一)&&虚拟机原理

    前言      我们知道任何一种关系型数据库管理系统都支持SQL(Structured Query Language),相对于文件管理系统,用户不用关心数据在数据库内部如何存取,也不需要知道底层的存储 ...

  8. Oracle学习笔记十一 游标

    游标的简介 游标的概念 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作 ...

  9. yii2源码学习笔记(十一)

    Controller控制器类,是所有控制器的基类,用于调用模型和布局. <?php /** * @link http://www.yiiframework.com/ * @copyright C ...

  10. Java基础学习笔记十一 Eclipse开发工具

    Eclipse是功能强大Java集成开发工具.它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中,使用的就是Eclipse进行开发. Eclipse的下载.安装.卸载 下载 http:/ ...

随机推荐

  1. IE加载项

    加载项   加载项也称为ActiveX控件.浏览器扩展.浏览器帮助应用程序对象或工具栏,可以通过提供多媒体或交互式内容(如动画)来增强对网站的体验. 但是,某些加载项可导致计算机停止响应或显示不需要的 ...

  2. python接口测试中安装whl格式的requests第三方模块

    下载 安装 requests第三方模块 下载:http://docs.python-requests.org/en/latest/user/install/#install 我下载是 https:// ...

  3. C#--virtual,abstract,override,new,sealed修饰符学习

    1.参考博客  http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html http://www.cnblogs.com/mygood ...

  4. VMWare中桥接、NAT、Host-only

    1.概述 2.bridged(桥接模式) 3.NAT(网络地址转换模式) 4.host-only(主机模式) 5.replicate physical network connection state ...

  5. python类方法、静态方法、实例方法例子

    类方法,静态方法,普通方法 #coding=utf-8   class Foo:     def __init__(self,name):         self.name=name       d ...

  6. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  7. 在uboot中加入cmd_run命令,运行环境变量

    在学习uboot的过程中会经常烧录程序,每次都要敲一些下载指令.这样是不是很麻烦,有什么办法能快速的烧写呢.很简单,将需要敲击的指令编译到uboot中,以环境变量的形式存在.但是环境变量很好加,如何运 ...

  8. Java lambda 表达式

    其实是试验一下markdown... 原: 只有一个抽象方法的接口称为函数式接口(functional interface). 当需要实现了这种接口的类的对象的时候,就可以提供一个lambda表达式. ...

  9. iotop监控磁盘动态安装

    开始装iotp tar xvf iotop-0.3.1.tar.gz 用python安装(如果没有蟒蛇, yum一个吧) cd iotop-0.3.1 python setup.py build py ...

  10. (GO_GTD_3)基于OpenCV和QT,建立Android图像处理程序

    一.解决权限问题     图片采集了,处理了,如何保存?最直接的方法是使用imwrite,但是如果现在直接使用的话,比如会出现这样或那样的错误,因为我们现在是在android的环境下进行图像处理,所以 ...