动作类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 positionbreak;case FLIPX_TAG:sprite->runAction(FlipX::create(true));// Flips the sprite horizontallybreak;case FLIPY_TAG:sprite->runAction(FlipY::create(true));// Flips the sprite verticallybreak;case HIDE_SHOW_TAG:if (hiddenFlag){sprite->runAction(Hide::create());// Hide the nodehiddenFlag = false;}else{sprite->runAction(Show::create());// Show the nodehiddenFlag = true;}break;case TOGGLE_TAG:sprite->runAction(ToggleVisibility::create());// Toggles the visibility of a nodebreak;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);
}

View Code

在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);
}

View Code

运行结果:

图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(2,Vec2(size.width-50, size.height-50)));break;case kMoveBy:sprite->runAction(MoveBy::create(2,Vec2(-50, -50)));break;case kJumpTo:// 第一个参数为持续时间,第二个参数为目标位置,第三个参数为高度,第四个参数为跳跃次数sprite->runAction(JumpTo::create(2,Vec2(150, 50), 30, 5));break;case kJumpBy:sprite->runAction(JumpBy::create(2,Vec2(100, 100),30,5));break;case kBezierBy:bezier.controlPoint_1 = Vec2(0, size.height/2);bezier.controlPoint_2 = Vec2(300, -size.height/2);bezier.endPosition = Vec2(100, 100);sprite->runAction(BezierBy::create(3, bezier));break;case kScaleTo:// 第一个参数为持续时间,第二个参数为缩放比例sprite->runAction(ScaleTo::create(2, 4));break;case kScaleBy:sprite->runAction(ScaleBy::create(2, 0.5));break;case kRotateTo:// 第一个参数为持续时间,第二参数为旋转角度sprite->runAction(RotateTo::create(2, 180));break;case kRotateBy:sprite->runAction(RotateBy::create(2, -180));break;case kBlink:// 第一个参数为持续时间,第二个参数为闪烁次数sprite->runAction(Blink::create(3, 5));break;case kTintTo:// 第一个参数为持续时间,剩余参数对应RGBsprite->runAction(TintTo::create(2, 255, 0, 0));break;case kTintBy:sprite->runAction(TintBy::create(0.5, 0, 255, 255));break;case kFadeTo:// 第一个参数为持续时间,第二个参数为不透明度(百分数)sprite->runAction(FadeTo::create(1, 80));break;case kFadeIn:sprite->setOpacity(10);// 0~255,0位完全透明// 参数为持续时间sprite->runAction(FadeIn::create(1));break;case kFadeOut:sprite->runAction(FadeOut::create(1));break;default:break;}
}

View Code

动作的速度控制示例:

void MyAction::goMenu(Ref* pSender)
{   log("Tag = %i",this->getTag());FiniteTimeAction * ac1 = (FiniteTimeAction *)MoveBy::create(2, Vec2(200, 0));FiniteTimeAction * ac2 = ((FiniteTimeAction *)ac1)->reverse();ActionInterval * ac = Sequence::create(ac1, ac2, NULL);switch (this->getTag()) {case kEaseIn:// 3倍速度由慢至快sprite->runAction(EaseIn::create(ac, 3));break;case kEaseOut:sprite->runAction(EaseOut::create(ac, 3));break;case kEaseInOut:sprite->runAction(EaseInOut::create(ac, 3));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() * 5)));break;}
}

View Code

转载于:https://www.cnblogs.com/AmitX-moten/p/4212166.html

Cocos2d-x学习笔记(十一)动作相关推荐

  1. Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)

    1. Nutch 1.3 的页面评分机制 Nutch1.3目前默认还是使用OPIC作为其网页分数算法,但其之后,已经引入了PageRank-like算法,以弥补OPIC算法的不足,目前OPIC算法还是 ...

  2. 吴恩达《机器学习》学习笔记十一——应用机器学习的建议

    吴恩达<机器学习>学习笔记十一--应用机器学习的建议 一.训练完模型后下一步要做什么 二.评估算法与模型选择 1.训练集与测试集 2.训练/测试步骤 3.模型选择 4.数据集新的划分--验 ...

  3. 吴恩达《机器学习》学习笔记十一——神经网络代码

    吴恩达<机器学习>学习笔记十一--神经网络代码 数据准备 神经网络结构与代价函数· 初始化设置 反向传播算法 训练网络与验证 课程链接:https://www.bilibili.com/v ...

  4. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  5. Apache Nutch 1.3 学习笔记十一(页面评分机制 LinkRank 介绍)

    下面是Google翻译的http://wiki.apache.org/nutch/NewScoring内容,是关于Nutch 新的链接分数算法的说明,有点类似于Google的PageRank,这里有其 ...

  6. Vue学习笔记(十一)

    1.Vue学习笔记(十一) 文章目录 1.Vue学习笔记(十一) 1.1Vue_配置代理_方式 1.1.0演示问题 1.1.1运行node server1 1.1.2运行node server2 1. ...

  7. Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程)

    Linux C/C++ 开发(学习笔记十一 ):TCP服务器(并发网络网络编程 一请求一线程) 一.TCP服务器(一请求一线程) 的原理 二.完整代码 三.测试 四.补充 一.TCP服务器(一请求一线 ...

  8. Polyworks脚本开发学习笔记(十一)-玩转获取参数(GET)与设置参数

    Polyworks脚本开发学习笔记(十一)-玩转获取参数(GET)与设置参数 Polyworks采用了脚本语言作为二次开发的工具,因此语言格式上非常规范和统一.其中一个重要的特点就是,几乎所有的对象都 ...

  9. kvm虚拟化学习笔记(十一)之kvm虚拟机扩展磁盘空间

    kvm虚拟机磁盘空间扩展与xen虚拟机磁盘空间扩展思路一致.原因在于xen/kvm默认的虚拟机磁盘格式为raw,所以方式可以通用. raw磁盘格式扩展思路如下 (1) 新添加一块raw格式的磁盘加入到 ...

  10. 步步为营 .NET 代码重构学习笔记 十一

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

最新文章

  1. C++条件变量使用详解
  2. java selenium常用API(WebElement、iFrame、select、alert、浏览器窗口、事件、js) 一
  3. sqoop将hive导出到mysql_Sqoop hive导出到mysql[转]
  4. C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)
  5. 鸿蒙车载智慧屏评测,华为智慧屏S Pro体验:告诉你鸿蒙OS有多优秀?
  6. scipy.sparse、pandas.sparse、sklearn稀疏矩阵的使用
  7. 大话IT职场之-办公室政治
  8. 四、 vSphere 6.7 U1(四):部署VCSA
  9. MAC上编译OpenCV
  10. VC++调用大漠插件
  11. 22年全国数学建模比赛ABC题思路模型
  12. 计算机能连上手机热点却无法连上无线网络,笔记本电脑win10系统无法连接手机热点,却能连上WiFi怎么办?...
  13. mysql中like与rlike_Hive中rlike,like,notlike区别及使用
  14. 数据集拆分data_spilt
  15. ubuntu 取消打印队列命令
  16. tabbaritem 图片太大解决方案
  17. 联发科MT33xx GNSS模块固件升级流程
  18. 恩智浦并购飞思卡尔后的十大优势
  19. atan2函数的用法
  20. EOS创始人BM:会发行新币来作为火星和地球之间的通用货币!

热门文章

  1. MongoDB基本管理命令 [转]
  2. mysql单表大小限制
  3. java final一点
  4. Apache 配置文件:.htaccess
  5. C#中可以使用正则表达式来过滤html字符
  6. php 清除浮动,清除浮动的几种方法
  7. linux添加环境变量并生效,linux(ubtuntu)添加环境变量,立即生效
  8. 将system.out.println的输出,输出调用类等其他参数的方法
  9. python高段编程_25个有用的 Python 代码段
  10. Typora优化,Typora结合PicGo,让工作更轻松【图文教程】