tween.js的API实践
看了网上多篇关于tween的使用教程,基本上千篇一律,大多数的写法都是像下面这样:
function initTween(geometry) {
var position = {y: };
tween = new TWEEN.Tween(position).to({y: }, );
tween.easing(TWEEN.Easing.Sinusoidal.InOut);
var tweenBack = new TWEEN.Tween(position).to({y: }, );
tweenBack.easing(TWEEN.Easing.Sinusoidal.InOut);
tween.chain(tweenBack);
tweenBack.chain(tween);
var onUpdate = function () {
var y = this.y;
//...对模型位置进行更改
};
tween.onUpdate(onUpdate);
tweenBack.onUpdate(onUpdate);
tween.start();
}
正如你所见到的,我们会在每个补间变化的时候(其实就是position变化的时候),取出当前值对模型进行一定的更改。
我一直好奇,为什么onUpdate回调里面的this是一个{y:0.768}这样的数据,不应该是tween对象么?
在最新的17版本的tween里面,onUpdate回调中this确实是指向tween实例的,所以我在17版本中这样实现上述代码(不在回调里面处理动画):
var position;
function initTween(){
position = {x: };
var tween = new TWEEN.Tween(position).to({x: -}, );
tween.easing(TWEEN.Easing.Quadratic.Out); var tweenBack = new TWEEN.Tween(position).to({x: }, );
tweenBack.easing(TWEEN.Easing.Sinusoidal.InOut); tween.chain(tweenBack);
tweenBack.chain(tween); tween.start();
} function render() {
sphere.position.x = position.x;
TWEEN.update();
renderer.render(scene, camera);
}
其实不难理解,补间动画运动的实质就是改变position(你可以看做空间内的一个点,虽然上述代码只有一个参数)的值来实现轨迹运动。
所以我们定义一个三维空间内的点P(x,y,z),按照tween已经实现的轨迹方程来定义P的运动轨迹;
并且在每帧渲染的时候,同步更新所有的补间(此时点P位置也会跟着变化),并根据点P的最新位置来改变物体的位置,从而实现物体运动。
so,你看到了,学习框架/库最好的方法是参考官网,因为官网总是最新的,而别人的博客可能早就过时了。
一、缓动动画之
tween.js的API实践的更多相关文章
- 十个书写Node.js REST API的最佳实践(上)
收录待用,修改转载已取得腾讯云授权 原文:10 Best Practices for Writing Node.js REST APIs 我们会通过本文介绍下书写Node.js REST API的最佳 ...
- 编写 Node.js Rest API 的 10 个最佳实践
Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由.进行认证和测试等话题,内容摘要如下 ...
- 十个书写Node.js REST API的最佳实践(下)
收录待用,修改转载已取得腾讯云授权 5. 对你的Node.js REST API进行黑盒测试 测试你的REST API最好的方法之一就是把它们当成黑盒对待. 黑盒测试是一种测试方法,通过这种方法无需知 ...
- ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定
本篇接着上一篇"ASP.NET Web API实践系列06, 在ASP.NET MVC 4 基础上增加使用ASP.NET WEB API",尝试获取数据. 在Models文件夹下创 ...
- Tween.js 动画效果
一.apply,和call的用法. 先来一个与本次博文无关的东西,就是apply和call的用法.其实apply和call的用法都一样,只是他们的传参不一样.apply是数组,而call是单独的传,类 ...
- Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结
Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结 1. 本文范围 1 2. Angular的优点 1 2.1. 双向数据绑定 1 2.2. dsl ...
- Cookie和Session在Node.JS中的实践(三)
Cookie和Session在Node.JS中的实践(三) 前面作者写的COOKIE篇.SESSION篇,算是已经比较详细的说明了两者间的区别.机制.联系了.阅读时间可能稍长,因为作者本身作图也做了不 ...
- 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏
本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...
- [转载]fullPage.js中文api 配置参数~
fullPage.js中文api 配置参数 选项 类型 默认值 说明 verticalCentered 字符串 true 内容是否垂直居中 resize 布尔值 false 字体是否随着窗口缩放而缩放 ...
随机推荐
- Springboot整合Ehcache 解决Mybatis二级缓存数据脏读 -详细
前面有写了一篇关于这个,但是这几天又改进了一点,就单独一篇在详细说明一下 配置 application.properties ,启用Ehcache # Ehcache缓存 spring.cache.t ...
- 搭建zookeeper集群_其中一个报Mode: standalone,另外两个分别是leader和follower
用3个zookeeper搭建一个zookeeper集群,首先配置好一个zookeeper1,其余两个都是按照zookeeper1复制过来,然后稍微修改 运行集群成功,查看zookeeper状态 可以看 ...
- python中的apply(),applymap(),map() 的用法和区别
平时在处理df series格式的时候并没有注意 map和apply的差异 总感觉没啥却别.不过还是有区别的.下面总结一下: import pandas as pd df1= pd.DataFrame ...
- python--AutoPy库
包括用于控制键盘和鼠标,在屏幕上查找颜色和位图以及显示警报的功能 - 所有这些都是以跨平台,高效和简单的方式进行的.适用于Mac OS X,Windows和X11 中文文档:https://blog. ...
- 题解 【POJ1952】 BUY LOW, BUY LOWER
题目意思: 给你一个长度为\(n\)(\(1<=n<=5000\))的序列,并求出最长下降子序列的长度及个数, 并且,如果两个序列中元素的权值完全相同,那么即使它们的位置不一样,也只算一种 ...
- pyspark中的dataframe的观察操作
来自于:http://www.bubuko.com/infodetail-2802814.html 1.读取: sparkDF = spark.read.csv(path) sparkDF = spa ...
- debug的基本用法
1.关于debug debug是dos.windows提供的实模式程序调试工具: 作用:查看cpu各寄存器的内容.内存情况.在机器码级别追踪程序的运行: 命令: debug 参数: r ...
- 51 Nod 1092 回文字符串
1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每 ...
- Redis Java连接池调研
Redis Java连接池调研 线上服务,由于压力大报错RedisTimeOut,但是需要定位到底问题出现在哪里? 查看Redis慢日志,slowlog get 发现耗时最大的也是11000us也就是 ...
- linux文本处理三剑客之 grep
文本处理无非是对文本内容做查看.修改等操作.Linux三剑客: grep.sed 和 awk 命令. 处理文本内容,用 Vim 编辑器不是很好吗?Vim 允许我们使用键盘.鼠标来对文本内容进行交互性地 ...