动作类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. 循环结构 for

    for格式:for(初始化表达式;循环条件表达式;循环后的操作表达式) { 执行语句:循环体 } ------------------------------------ -------------- ...

  2. javascript产生对象(不建议看)

    产生对象的方式:一.new+构造函数1.JavaScript的内置构造函数,如Date(),Function(),Array(),Object()2.自定义的构造函数二.对象字面量{}三.继承 用 v ...

  3. C#实现无标题栏窗体点击任务栏图标正常最小化或还原的解决方法

    对于无标题栏窗体,也就是FormBorderStyle等于System.Windows.Forms.FormBorderStyle.None的窗体,点击任务栏图标的时候,是不能象标准窗体那样最小化或还 ...

  4. docker命令及操作

    docker pull 镜像名字 dockers images docker image ls docker image rm 镜像名/镜像ID docker ps docker ps -a dock ...

  5. vue性能优化1--懒加载

    懒加载也叫延迟加载,即在需要的时候进行加载.随用随载.为什么需要懒加载?像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要加载的内容过多,时间 ...

  6. STA分析(一) setup and hold

    timing check可以分为Dynamic Timing Analysis(Post_sim)和Static Timing Analysis STA:可以分析的很全面:仿真速度也很快:可以分析控制 ...

  7. VS2010/MFC编程入门之四十(文档、视图和框架:各对象之间的关系)

    前面一节中鸡啄米进行了文档.视图和框架的概述,本节主要讲解文档.视图.框架结构中各对象之间的关系. 各个对象之间的关系 文档.视图.框架结构中涉及到的对象主要有:应用程序对象.文档模板对象.文档对象. ...

  8. Linux命令:查看文件内容cat|tac|more|less|head|tail|nl|od

    查看文件内容的命令;cat, tac, more, less, head, tail, nl, 1)cat 由第一行开始显示文档内容,一直显示到最后 2)tac 从最后一行开始显示,一直显示到第一行内 ...

  9. yum hosts

    67.219.148.138 mirrorlist.centos.org202.38.97.230 ftp.sjtu.edu.cn202.121.199.235 mirrors.shu.edu.cn2 ...

  10. Node.js最新技术栈之Promise篇

    前言 大家好,我是桑世龙,github和cnodejs上的i5ting,目前在天津创业,公司目前使用技术主要是nodejs,算所谓的MEAN(mongodb + express + angular + ...