Cocos2d-x 学习笔记(11.3) JumpBy JumpTo
1. JumpBy JumpTo
JumpBy,边跳边平移,不只做垂直向上的抛物动作,同时还在向终点平移。JumpTo是JumpBy的子类。
1.1 成员变量 create方法
JumpBy:
Vec2 _startPosition; // startWithTarget getPosition设置
Vec2 _delta; // create 参数position设置
float _height; // create参数
int _jumps; // create参数
Vec2 _previousPos; // startWithTarget getPosition设置
JumpTo:
Vec2 _startPosition; // startWithTarget getPosition设置
Vec2 _delta; // _endPosition减_startPosition
float _height; // create参数
int _jumps; // create参数
Vec2 _previousPos; // startWithTarget getPosition设置
Vec2 _endPosition; // create 用参数position设置
JumpBy::create(float duration, const Vec2& position, float height, int jumps)
JumpTo::create(float duration, const Vec2& position, float height, int jumps)
1.2 startWithTarget
JumpBy:
ActionInterval::startWithTarget(target);
_previousPos = _startPosition = target->getPosition();
JumpTo:
JumpBy::startWithTarget(target);
_delta.set(_endPosition.x - _startPosition.x, _endPosition.y - _startPosition.y);
1.3 update
JumpBy:
首先计算float frac:
float frac = fmodf( t * _jumps, 1.0f );
t * _jumps是目前总跳跃次数完成的进度,与1求余的值是正在进行的这次跳跃完成的进度。
下一步计算float y:
float y = _height * * frac * ( - frac);
y = _height * 4 * frac * (1 - frac)是以frac为X,y为Y建立的二次函数方程。frac为1时,一次跳跃动作完成。frac为0.5时,跳跃动作运动到最高点。
接下来:
y += _delta.y * t; // _delta是create设置的终点坐标
float x = _delta.x * t;
将当前进度的平移y的坐标加当前一次跳跃进度的y坐标,作为本次y终值。
x只要考虑X方向平移的进度,跳跃与X方向无关。
接下来就简单了:
Vec2 currentPos = _target->getPosition();
Vec2 diff = currentPos - _previousPos;
_startPosition = diff + _startPosition;
Vec2 newPos = _startPosition + Vec2(x,y);
_target->setPosition(newPos);
_previousPos = newPos;
和Move的差不多,只是newPos在之前已经计算好了。这里也用到了宏定义判断CC_ENABLE_STACKABLE_ACTIONS。
JumpTo:
使用父类JumpBy的update方法,不同之处只是To的_delta在startWithTarget中计算的positioin,By直接使用了我们设置的positioin。
Cocos2d-x 学习笔记(11.3) JumpBy JumpTo的更多相关文章
- 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> 图片参考了 ...
随机推荐
- 7、创建图及图的遍历(java实现)
1.顺序表用于图的深度优先遍历 public class SeqList { public final int MaxSize = 10; public Object list[]; public i ...
- c语言运算优先级与结合方向的问题
c语言运算的结合方向一直困扰我,不过我终于get到了哈哈 先附上c语言运算优先级和结合方向图片 以上有c语言一共的15个优先级,从上往下递增 c语言的运算符号有很多,当我们打代码或者看代码的时候符号多 ...
- MOOC C++笔记(四):运算符重载
第四周:运算符重载 基本概念 运算符重载,就是对已有的运算符(C++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为. 运算符重载的目的是:扩展C++中提供的运算 ...
- [Link 2005]vs2015 LNK2005 "class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl printR(class std::basic_ostream<char,struct std::char_traits<char> > &,class QueryResult const &)" (?
vs2015 LNK2005 "class std::basic_ostream<char,struct std::char_traits<char> > &am ...
- 基于docker构建测试环境
目录 0x01介绍 0x02 镜像基本操作 0x03 容器基本操作 0x04 容器的修改与保存 0x05 使用Dockerfile定制镜像 0x01介绍 Docker 是一个开源的应用容器引擎,基于 ...
- Windows认证 | 域认证
在Windows中的身份认证方式有很多,也在不断的升级,但是在域中,依旧使用的是Kerberos认证. Kerberos 是一种网络认证协议,它的实现不依赖于主机操作系统的认证,无需基于主机地址的信任 ...
- 第四周 Java课件内容动手动脑
1.JDK中的Math类 package ke1; public class TestMath { public static void main(String[] args) { /*------- ...
- Python的未来发展方向
Python是一种跨平台的计算机程序设计语言. 是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发. ...
- SLES15SP1 AutoYast - PXE 技术
由于最近在做几个Ceph项目,基本都是50个节点起,那我们在项目中经常使用PXE技术来实现系统自动化安装,提高效率,可能有会说PXE技术太老了没什么好了解,但我觉得的很实用,尤其在项目型工程中,通过P ...
- Spring Boot 2.x基础教程:JSR-303实现请求参数校验
请求参数的校验是很多新手开发非常容易犯错,或存在较多改进点的常见场景.比较常见的问题主要表现在以下几个方面: 仅依靠前端框架解决参数校验,缺失服务端的校验.这种情况常见于需要同时开发前后端的时候,虽然 ...