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的更多相关文章

  1. Ext.Net学习笔记11:Ext.Net GridPanel的用法

    Ext.Net学习笔记11:Ext.Net GridPanel的用法 GridPanel是用来显示数据的表格,与ASP.NET中的GridView类似. GridPanel用法 直接看代码: < ...

  2. SQL反模式学习笔记11 限定列的有效值

    目标:限定列的有效值,将一列的有效字段值约束在一个固定的集合中.类似于数据字典. 反模式:在列定义上指定可选值 1. 对某一列定义一个检查约束项,这个约束不允许往列中插入或者更新任何会导致约束失败的值 ...

  3. golang学习笔记11 golang要用jetbrain的golang这个IDE工具开发才好

    golang学习笔记11   golang要用jetbrain的golang这个IDE工具开发才好  jetbrain家的全套ide都很好用,一定要dark背景风格才装B   从File-->s ...

  4. Spring MVC 学习笔记11 —— 后端返回json格式数据

    Spring MVC 学习笔记11 -- 后端返回json格式数据 我们常常听说json数据,首先,什么是json数据,总结起来,有以下几点: 1. JSON的全称是"JavaScript ...

  5. Python3+Selenium3+webdriver学习笔记11(cookie处理)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记11(cookie处理)'''from selenium im ...

  6. 并发编程学习笔记(11)----FutureTask的使用及实现

    1. Future的使用 Future模式解决的问题是.在实际的运用场景中,可能某一个任务执行起来非常耗时,如果我们线程一直等着该任务执行完成再去执行其他的代码,就会损耗很大的性能,而Future接口 ...

  7. 《C++ Primer Plus》学习笔记11

    <C++ Primer Plus>学习笔记11 第17章 输入.输出和文件 <<<<<<<<<<<<<< ...

  8. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  9. Spring 源码学习笔记11——Spring事务

    Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...

随机推荐

  1. VMware Ubuntu 19最新安装详细过程

    ubuntu可以说是目前最流行的Linux改造版了(如果安卓不算的话),现在的很多服务器都是linux系统的,而自己属于那种前端也搞,后台也搞,对框架搭建也感兴趣,但是很多生产上的框架和工具都是安装在 ...

  2. STL目录

    觉得STL有必要讲一下,毕竟STL包含的东西太又用了. STL(Standard Template Library)这个玩意是啥,怎么来的之类的我就不说了,百度上一大推. 我就说一下ACM或者OI中会 ...

  3. 〈三〉ElasticSearch的认识:搜索、过滤、排序

    目录 上节回顾 本节前言 文档的搜索 URL参数条件搜索 请求体条件搜索 语法与示例: 补充: 小节总结: 文档的过滤filter 语法与举例: filter与bool constant_score ...

  4. python pandas进行条件筛选时出现ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().”

    在使用pandas进行条件筛选时,使用了如下的代码: fzd_index=data[(data['实际辐照度']<mi)or(data['实际辐照度']>ma)].index 原本以为,并 ...

  5. 03.Django基础三之视图函数

    一 Django的视图函数view 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错 ...

  6. aclocal-1.14: 未找到命令

    WARNING: 'aclocal-1.14' is missing on your system. 一条命令解决 autoreconf -ivf

  7. [Linux] CentOS 显示 -bash: vim: command not found

    转载自:https://www.cnblogs.com/wenqiangwu/p/3288349.html i. 那么如何安裝 vim 呢?输入rpm -qa|grep vim 命令, 如果 vim ...

  8. Android Studio [RecyclerView/列表视图]

    LinearRecyclerViewActivity.java package com.xdw.a122.recyclerview; import android.graphics.Rect; imp ...

  9. 利用Python进行数据分析:【Matplotlib】

    一.简单介绍Matplotlib 1.Matplotlib是一个强大的Python绘图和数据可视化的工具包2.安装方法:pip install matplotlib 3.引用方法:import mat ...

  10. 两种读取.xml文件的方法

    这里介绍两种读取配置文件(.xml)的方法:XmlDocument及Linq to xml 首先简单创建一个配置文件: <?xml version="1.0" encodin ...