Cocos2d-x 学习笔记(9) Action 运行原理
1. 从一个Action开始
1.1 创建
在Scene里写一个Sprite,并添加Action:
Sprite *sp = Sprite::create("m1.png");
MoveBy *mb = MoveBy::create(, Vec2(,));
sp->runAction(mb);
this->addChild(sp);
先通过create方法创建Action,之后Sprite和Action通过runAction方法产生联系。
create方法坐标参数被转为Z为0的三维坐标。
看create方法主要语句:
MoveBy *ret = new (std::nothrow) MoveBy();
ret->initWithDuration(duration, deltaPosition))
ret->autorelease();
return ret;
Action交给内存管理池进行内存管理,还要执行initWithDuration方法。
看initWithDuration方法,调用了父类的ActionInterval的initWithDuration(duration),并设置MoveBy的成员变量:
_positionDelta = deltaPosition;
_is3D = true;
看父类的ActionInterval的initWithDuration(duration)方法,是设置了父类成员变量:
_duration = d;
_elapsed = ;
_firstTick = true;
_done = false;
创建好了Action,执行runAction方法,主要是执行下面的语句:
_actionManager->addAction(action, this, !_running);
ActionManager的addAction方法在我的这篇文章有介绍,再次介绍大致流程:

结束之前执行action的startWithTarget(target)方法,该方法实际执行了其所有继承类的同名方法,对以下成员变量设置:
_originalTarget = _target = aTarget; // Action
_elapsed = 0.0f;
_firstTick = true;
_done = false;
_previousPosition = _startPosition = target->getPosition3D(); // MoveBy
简要地说,是把action添加到node对应的element的actions容器中,并通过ActionManager把action和node匹配,并不是“run”。
1.2 运行
Action的实际运行在ActionManager的update方法中,该方法简要地说是对ActionManager的哈希链表_targets进行遍历,对遍历到的每个element的actions再遍历,对遍历到的action执行step(float dt)。
MoveBy的step(float dt)方法实际是执行父类的同名方法,在每次step方法中又会调用一次MoveBy的update方法,step和update的大致流程:

2. 总结
创建并使用action,用到了action的create方法和node的runAction方法,也使action与node产生了关联。
随着ActionManager在每帧调用回调函数update,每个element的action都会执行一次step方法和update方法,step通过已执行的时间(进度时间与帧间隔dt的和)与我们定义的总时长来计算动作执行进度,update把执行进度转为我们在屏幕上看到的进度。当进度到1,动作执行完了,_done置true。
Cocos2d-x 学习笔记(9) Action 运行原理的更多相关文章
- Java IO学习笔记:概念与原理
Java IO学习笔记:概念与原理 一.概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...
- tensorflow学习笔记——模型持久化的原理,将CKPT转为pb文件,使用pb模型预测
由题目就可以看出,本节内容分为三部分,第一部分就是如何将训练好的模型持久化,并学习模型持久化的原理,第二部分就是如何将CKPT转化为pb文件,第三部分就是如何使用pb模型进行预测. 一,模型持久化 为 ...
- go学习笔记二:运行使用命令行参数
本文只作为博主的go语言学习笔记. 对命令行参数的解析,只是在运行时使用的,比如以下命令:go run gomain -conf conf.toml 没有办法再go build时使用. 一.运行时命令 ...
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- 强化学习-学习笔记7 | Sarsa算法原理与推导
Sarsa算法 是 TD算法的一种,之前没有严谨推导过 TD 算法,这一篇就来从数学的角度推导一下 Sarsa 算法.注意,这部分属于 TD算法的延申. 7. Sarsa算法 7.1 推导 TD ta ...
- 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维
关键字:SVD.奇异值分解.降维.基于协同过滤的推荐引擎作者:米仓山下时间:2018-11-3机器学习实战(Machine Learning in Action,@author: Peter Harr ...
- Web安全学习笔记之Nmap扫描原理与用法
1 Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字N ...
- Android(java)学习笔记95:Android原理揭秘系列之View、ViewGroup
作过Android 应用开发的朋友都知道,Android的UI界面都是由View和ViewGroup及其派生类组合而成的.其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器, ...
- [spring入门学习笔记][spring的IoC原理]
什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...
随机推荐
- 浮动后的 <li> 如何在 <ul> 中居中显示?
百度了许久都没有满意的解决方案,现在终于搞定了. 其实,只要 ul 的父元素 css 样式设了 text-align: center; 然后 ul 设了 display: inline-block; ...
- charles 高亮Hosts
本文参考:charles 高亮Hosts Focus Host是焦点域名的:这里配置好的可以在结构视图中,单独拎出来显示: 如下图,在把zhubangbang.com设为焦点域名,在视图中是下图这么展 ...
- Day 1 linux系统的发展史与虚拟机的安装过程
自由软件之父 Richard M. Stallman 1984 发起了GNU组织 copyleft opensourc free GPL copyleft 代表无版权.copyright 代表有版权. ...
- 论文阅读 | DeepDrawing: A Deep Learning Approach to Graph Drawing
作者:Yong Wang, Zhihua Jin, Qianwen Wang, Weiwei Cui, Tengfei Ma and Huamin Qu 本文发表于VIS2019, 来自于香港科技大学 ...
- Python数据分析入门案例
转载自 https://blog.csdn.net/lijinlon/article/details/81517699 Data analysis by Python 入门 1. 重复数据处理 在Da ...
- [Linux] CentOS 显示 -bash: vim: command not found
转载自:https://www.cnblogs.com/wenqiangwu/p/3288349.html i. 那么如何安裝 vim 呢?输入rpm -qa|grep vim 命令, 如果 vim ...
- RabbitMQ的六种工作模式总结
最近学习RabbitMQ的使用方式,记录下来,方便以后使用,也方便和大家共享,相互交流. RabbitMQ的六种工作模式: 1.Work queues2.Publish/subscribe3.Rout ...
- Python学习-while循环&逻辑运算符
一.while循环,continue.break语句在while循环中的使用 1.while循环语句: while 条件: 代码块 执行过程:判断条件是否为真,如果为真,执行代码块,继续下次循 ...
- 转载:elastic5.x部署常见问题总结
原博文名称:ElasticSearch 5.0.0 安装部署常见错误或问题 原博文地址为:http://www.dajiangtai.com/community/18136.do?origin=csd ...
- sublime_REPL使用及安装教程(解决Sublime无交互问题)
谈到python编程工具能想到那些? pycharm?IDLE? Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等,还可自定义键绑定,菜单和工具栏. ...