Cocos2d-x 学习笔记(11.7) Repeat RepeatForever
1. 成员变量
Repeat:
unsigned int _times; //create参数
unsigned int _total; //执行的次数
float _nextDt; //startWithTarget计算,当前所有action已执行的时间占总时间占比,轮到下次Repeat需要的时间进度
bool _actionInstant; //create中对action是否瞬时的判断
FiniteTimeAction *_innerAction; //create参数
RepeatForever:
ActionInterval *_innerAction; //create参数
2. create
Repeat::create(FiniteTimeAction *action, unsigned int times)
RepeatForever::create(ActionInterval *action)
Repeat:
用参数赋值两个成员变量后,判断action是否为瞬时动作:
ActionInterval::initWithDuration(d) // 动作次数*一个动作时长
_actionInstant = dynamic_cast<ActionInstant*>(action) ? true : false;
_total = 0;
RepeatForever:用参数设置变量action。
3. startWithTarget
Repeat:
_total = ;
_nextDt = _innerAction->getDuration()/_duration; //一个action时间占总时间的占比
ActionInterval::startWithTarget(target);
_innerAction->startWithTarget(target);
RepeatForever:
ActionInterval::startWithTarget(target);
_innerAction->startWithTarget(target);
4. update
RepeatForever没有update方法。每一帧,RepeatForever step方法调用action的step。
Repeat:
简要的说,如果当前进度没到触发下次Repeat的进度时,继续执行本次未完成的update。到了触发下次Repeat进度时,先对本次Repeat执行完成,为下次Repeat的action进行初始化,并为触发下下次Repeat的进度进行计算。如果到了总次数,停止当前action,否则执行action update。
void Repeat::update(float dt)
{
if (dt >= _nextDt) // 当前进度到达下次Repeat触发进度
{
while (dt >= _nextDt && _total < _times) //到达下次Repeat触发进度且执行次数没到要求,进入循环
{
if (!(sendUpdateEventToScript(1.0f, _innerAction)))
_innerAction->update(1.0f); //执行action
_total++; //执行好了,次数+1 _innerAction->stop();
_innerAction->startWithTarget(_target); //重新初始化action
_nextDt = _innerAction->getDuration()/_duration * (_total+); //设置新的触发一次Repeat的进度
} //... if (!_actionInstant) //不能是瞬时动作
{
if (_total == _times) //到达总次数限制
{ _innerAction->stop();
}
else
{
if (!(sendUpdateEventToScript(dt - (_nextDt - _innerAction->getDuration()/_duration), _innerAction)))
_innerAction->update(dt - (_nextDt - _innerAction->getDuration()/_duration)); //执行
}
}
}
else //没到触发下一次Repeat的进度,继续执行本次Repeat的action
{
if (!(sendUpdateEventToScript(fmodf(dt * _times,1.0f), _innerAction)))
_innerAction->update(fmodf(dt * _times,1.0f)); //参数为当前Repeat的进度
}
}
Cocos2d-x 学习笔记(11.7) Repeat RepeatForever的更多相关文章
- Ext.Net学习笔记11:Ext.Net GridPanel的用法
Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...
- SQL反模式学习笔记11 限定列的有效值
目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...
- golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好
golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好 jetbrain家的全套ide都很好用,一定要dark背景风格才装B 从File-->s ...
- Spring MVC 学习笔记11 —— 后端返回json格式数据
Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...
- Python3+Selenium3+webdriver学习笔记11(cookie处理)
#!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...
- 并发编程学习笔记(11)----FutureTask的使用及实现
1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...
- 《C++ Primer Plus》学习笔记11
<C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...
- SpringMVC:学习笔记(11)——依赖注入与@Autowired
SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...
- Spring 源码学习笔记11——Spring事务
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...
随机推荐
- shell中sh, exec, source, fork, ./的区别
shell中sh, exec, source, fork, ./的区别 1,sh sh test.sh sh是通过创建子进程(subshell)去执行脚本,父进程无法使用子进程中的变量,而子进程对 ...
- Set集合、List集合
集合体系:Collection.Map接口 存储数量不等的多个对象,不能存储基本数据类型,如存储基本数据类型会自动装箱 ======================================== ...
- 关于读写APP.config文件能读却写不了的问题
今天要求用winform写一个窗口用来读写一个App.config,要对 <appSettings>里面的add key和value进行添加和修改.要实现的效果图如下: -------- ...
- Docker学习之volume
提供独立于容器之外的持久化存储 容器中的数据会随着容器的消失而消失,为了解决这个问题,产生了数据卷volume. 例子,比如说mysql容器,msyql中的数据应该是持久化的,故应该存储在volume ...
- [LeetCode] 由 “找零钱" 所想
Ref: [Optimization] Dynamic programming[寻找子问题] Ref: [Optimization] Advanced Dynamic programming[优于re ...
- 线上CPU飙升100%问题排查,一篇足矣
一.引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高. 二.问题复现 线上系统突然 ...
- PacMan 04——道具生成吃下道具怪物的移动
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- 略学扩展Eculid算法
扩展 Euclid 算法 Euclid 算法 辗转相除法 计算两个数最大公因数 \(\text{gcd}(a,\,b) = \text{gcd}(b,\,a\%b)\) exEuclid 算法 裴蜀定 ...
- rpm -qa|grep nfs >/dev/null 2>&1作用
在使用一些shell命令是,经常会用到rpm -qa|grep nfs >/dev/null 2>&1之类的命令,该命令干嘛用的呢? 其实这个命令就是将rpm -qa|grep n ...
- 阿里云ESC服务器centos6.9使用及注意事项
阿里云ESC服务器,配置低,但是足够新手尝试操作练习. 使用之前,注意事项: 选择操作系统 设置实例快照 安装终端工具 一,选择操作系统. 可以在购买服务器的时候进行选择系统盘,也可以在购买之后在实例 ...