Cocos2d-x学习笔记(十一)动作
动作类Action是一切动作的祖先类。它有三个直接继承子类:
- FiniteTimeAction受时间限制的动作;
- Follow精灵跟随精灵的动作;
- 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学习笔记(十一)动作的更多相关文章
- python3.4学习笔记(十一) 列表、数组实例
python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...
- Go语言学习笔记十一: 切片(slice)
Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- SharpGL学习笔记(十一) 光源创建的综合例子:光源参数可调节的测试场景
灯光的测试例子:光源参数可以调节的测试场景 先看一下测试场景和效果. 场景中可以切换视图, 以方便观察三维体和灯光的位置.环境光,漫射光,镜面反射光都可以在四种颜色间切换. 灯光位置和摄像机位置(Lo ...
- 重温JSP学习笔记--JSP动作标签
上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...
- java jvm学习笔记十一(访问控制器)
欢迎装载请说明出处: http://blog.csdn.net/yfqnihao/article/details/8271665 这一节,我们要学习的是访问控制器,在阅读本节之前,如果没有前面几节的 ...
- SQLite学习笔记(十一)&&虚拟机原理
前言 我们知道任何一种关系型数据库管理系统都支持SQL(Structured Query Language),相对于文件管理系统,用户不用关心数据在数据库内部如何存取,也不需要知道底层的存储 ...
- Oracle学习笔记十一 游标
游标的简介 游标的概念 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作 ...
- yii2源码学习笔记(十一)
Controller控制器类,是所有控制器的基类,用于调用模型和布局. <?php /** * @link http://www.yiiframework.com/ * @copyright C ...
- Java基础学习笔记十一 Eclipse开发工具
Eclipse是功能强大Java集成开发工具.它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中,使用的就是Eclipse进行开发. Eclipse的下载.安装.卸载 下载 http:/ ...
随机推荐
- minus查找两张表的不同项
minus关键字的使用: select * from A minus select * from B; 上面的SQL语句返回的是表A中存在,表B中不存在的数据: 注意:1.区分不同的规则是查询的所有字 ...
- Java序列化总结
什么是序列化? 序列化是将对象的状态信息转化为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后可以通过存储区中读取或反序列化对象的状态重新创建对象. 为什么要序 ...
- Java Nested Classes(内部类~第一篇英文技术文档翻译)
鄙人最近尝试着翻译了自己的第一篇英文技术文档.Java Nested Classes Reference From Oracle Documentation 目录 嵌套类-Nested Classes ...
- TouchSlide触屏滑动特效插件的使用
官方连接:http://www.superslide2.com/TouchSlide/ TouchSlide 是纯javascript打造的触屏滑动特效插件,面向手机.平板电脑等移动终端, 能实现触屏 ...
- VS2010/MFC编程入门之四十七(字体和文本输出:CFont字体类)
上一节中鸡啄米讲了MFC异常处理,本节的主要内容是字体CFont类. 字体简介 GDI(Graphics Device Interface),图形设备接口,是Windows提供的一些函数和结构,用于在 ...
- 十图详解tensorflow数据读取机制
在学习tensorflow的过程中,有很多小伙伴反映读取数据这一块很难理解.确实这一块官方的教程比较简略,网上也找不到什么合适的学习材料.今天这篇文章就以图片的形式,用最简单的语言,为大家详细解释一下 ...
- linux下如何进入单用户模式
忘记密码时,我们可以通过进入单用户模式修改密码. 进入单用户模式的方式: 1. 启动服务器时,按 e 键进入引导选择界面.注意:可能需要多次按 e 键切换几个个界面后,才能进入选择界面. 2. 选择以 ...
- 使用 Laravel 数据填充生成 中文 测试数据
Laravel5.4 及更新版本设置了相关的配置项 app.faker_locale,只不过在文档和默认的配置文件中看不到这一参数.相关源码在 Illuminate\Database\Database ...
- AtCoder Beginner Contest 086 D - Checker
Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement AtCoDeer is thinking o ...
- Python之路----各类推导式
[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型] #遍历之后挨个处理[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] #筛选功能 列表推导 ...