看了网上多篇关于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,你看到了,学习框架/库最好的方法是参考官网,因为官网总是最新的,而别人的博客可能早就过时了。

一、缓动动画之

最新文章

  1. vue.js 的学习
  2. 【Tyvj1601】魔兽争霸(主席树,树套树)
  3. 酷派5890 ROM教程
  4. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [1] 单例模式连接数据库
  5. How can I retrieve the remote git address of a repo?
  6. Java中transient有何作用?
  7. 2124: 等差子序列 - BZOJ
  8. 运行Android应用时提示ADB是否存在于指定路径问题
  9. cocos2d(3.0)一些基础的东西
  10. 挖掘微信Web版通信的全过程
  11. JS实现文本复制与剪切
  12. java基础知识拾遗(四)
  13. canvas绘制圆心扇形可组成颜色随机的七色小花
  14. iOS -- Effective Objective-C 阅读笔记 (9)
  15. 深度学习之概述(Overview)
  16. [Java in NetBeans] Lesson 05. Method/function
  17. Windwos8.1下配置PHP环境
  18. C# MD5 32位加密 UTF-8编码
  19. 阿里云centos7安装桌面环境
  20. html内容滚动

热门文章

  1. zencart新增分类点击不进去的解决办法
  2. 转 shell中的多进程【并发】
  3. Windowsx下Appium环境搭建步骤及问题
  4. Zabbix Server设置主机监控
  5. MySQL Audit日志审计
  6. 报表开发神器!DevExpress Reporting v19.1全平台新功能解析
  7. PHP中使用PDO的预处理功能避免SQL注入
  8. hdu 6068 Classic Quotation
  9. gradle——入门
  10. JavaScript相关知识点