动作类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. window下安装mongodb3.6

    系统:Win10 x64位 1.在官网下载对应的mongod https://www.mongodb.com/download-center?jmp=nav#community 2.下载后在win+R ...

  2. R中双表操作学习[转载]

    转自:https://www.jianshu.com/p/a7af4f6e50c3 1.原始数据 以上是原有的一个,再生成一个新的: > gene_exp_tidy2 <- data.fr ...

  3. 使用masory

    动态更新约束的时候老是提示有多余的约束,我使用update_contraits  make_contraits  都不能解决,后来使用了remake_contraits才消除了告警. view pro ...

  4. Log Parser 2.2 + Log Parser Lizard GUI 分析IIS日志示例

    Log Parser 日志分析工具,用命令行操作,可以分析 IIS logs,event logs,active directory,log4net,file system,t-sql Log Par ...

  5. testng入门教程3用TestNG执行case的顺序

    本教程介绍了TestNG中执行程序的方法,这意味着该方法被称为第一和一个接着.下面是执行程序的TestNG测试API的方法的例子. 创建一个Java类文件名TestngAnnotation.java在 ...

  6. mysql数据库环境配置中部分问题解决办法

    注:原文地址:https://www.cnblogs.com/hezhuoheng/p/9366630.html 其中最重要的,是三个原则:命令按顺序输入.删除了ini(这个不是原则,是我解决问题的一 ...

  7. servlet07

    1.session验证 可以防止非登录的用户,通过在地址栏中输入地址,访问受保护的页面 step1.在用户登录成功之后,将用户的信息保存到session中 step2.在访问受保护的页面时,校验ses ...

  8. OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解 (转)

    cv::Matdepth/dims/channels/step/data/elemSizeThe class Mat represents an n-dimensional dense numeric ...

  9. Linux系统——DHCP

    DHCP定义DHCP服务是负责IP.掩码.网关地址.DNS地址等自动分发的软件服务DHCP的分配方式(1)自动分配:分配到一个IP地址后永久使用(2)手动分配:由DHCP服务器管理员专门指定IP地址( ...

  10. VS2010/MFC编程入门之四十三(MFC常用类:CTime类和CTimeSpan类)

    上一节中鸡啄米讲了MFC常用类CString类的用法,本节继续讲另外两个MFC常用类-日期和时间类CTime类和CTimeSpan类. 日期和时间类简介 CTime类的对象表示的时间是基于格林威治标准 ...