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:/ ...
随机推荐
- [py]戏说python面向对象细节
面向对象圣经 认识面向对象 什么是面向对象? 有什么实在的好处? 被坑了这么多年,没弄清楚和面向过程有啥切身的区分 我以为这都是大学老师的错. 没把我们启蒙好. 这么多年深受其害. 总结起来三个字: ...
- iOS 开发笔记-Storyboard
什么时候用Pust,什么时候用Modal? 一般情况下,是导航控制器点过去的,都使用Pust.如果是相对独立的,则用Modal,比如是导航上面的+添加之类. 关闭一个Modal -(IBAction) ...
- 通过脚本获取form表单的数值而不是submit
jQuery的serialize()方法通过序列化表单值,创建URL编码文本字符串,我们就可以选择一个或多个表单元素,也可以直接选择form将其序列化,如: <form action=" ...
- Qt addStretch()详解
addStretch函数,是在布局的时候用到. 函数原型: void QBoxLayout::addStretch ( int stretch = 0 ) 作用:平均分配Layout 比如: QVBo ...
- c# 日期函数[string.Format----GetDateTimeFormats]格式
DateTime dt = DateTime.Now;Label1.Text = dt.ToString();//2005-11-5 13:21:25Label2.Text = dt.ToFileTi ...
- js自执行函数的常见写法
js自执行函数的常见写法 2016-12-20 20:02:26 1.关于自执行函数 1.1 写自执行函数的好处:独立的作用域,不会污染全局环境 (function() { })(); 1.2 理解重 ...
- EBS 多组织访问设置
如果想让你的职责下为单组织模式,那么你在Profile下只设置MO: Operating Unit的值,MO: Operating Unit提供只访问一个单独的OU.如果你想让你的职责下为多组织模式, ...
- python3 列表的常用方法
Python3中常用的列表方法(method) 见:help(list) 方法 意义 L.index(v [, begin[, end]]) 返回对应元素的索引下标, begin为开始索引,end为结 ...
- seo标题关键字描述字数限制Title,keywords,description长度最长多长 ?
seo标题关键字描述字数限制 seo优化各个搜索引擎收录Title,keywords,description长度最长多长 ?SEO网站优化中Title标签的作用为重中之重,好的Title也就成功了一半 ...
- 解决input标签placeholder属性浏览器兼容性问题的一种方法
为文本框input添加文字输入提示,H5为input提供了一个placeholder属性.在支持H5的浏览器中,用此属性设置输入提示,简单方便,但是对于IE8以下版本,都不支持placeholder属 ...