js:如何在动画循环中的3个动画序列状态之间顺利过渡
three.js: how to transition smoothly between 3 animation sequence states in the animate loop
我试图在短时间内顺利完成3种不同的扑翼序列的过渡。现在它们只是从一个状态跳到另一个状态。拍动翅膀有三种状态:1)在地面上。2)飞起来。3)向下飞。这很令人困惑,因为循环中的任何东西都会被循环,但是每次状态改变时,这将是一个平滑的一次转换。有什么好主意吗?
这是一个活塞
这是相关的JS:
Pig.prototype.updateWingsFly = function() {
this.wingAngle += this.wingSpeed/globalSpeedRate;
this.wingL.rotation.z = -Math.PI / 4 + Math.cos(this.wingAngle) * this.wingAmplitude;
this.wingR.rotation.z = Math.PI / 4 - Math.cos(this.wingAngle) * this.wingAmplitude;
}
Pig.prototype.updateWingsDescend = function() {
this.wingAngle += this.wingSpeed/globalSpeedRate;
this.wingL.rotation.z = -Math.PI / 2 + Math.cos(this.wingAngle) * this.wingAmplitude / 4;
this.wingR.rotation.z = Math.PI / 2 - Math.cos(this.wingAngle) * this.wingAmplitude / 4 ;
}
Pig.prototype.updateWingsRest = function() {
this.wingAngle += this.wingSpeed/globalSpeedRate;
this.wingL.rotation.z = -Math.PI / 4 + Math.cos(this.wingAngle) * this.wingAmplitude / 8;
this.wingR.rotation.z = Math.PI / 4 - Math.cos(this.wingAngle) * this.wingAmplitude / 8;
}
function loop(){
render();
var xTarget = (mousePos.x-windowHalfX);
var yTarget= (mousePos.y-windowHalfY);
pig.look(xTarget, yTarget);
getFlyPosition();
if (objectHeight === 0){
pig.updateWingsRest();
} else if (isFlyingUp){
pig.updateWingsFly();
} else {
pig.updateWingsDescend();
}
requestAnimationFrame(loop);
}
Tween.js是您的解决方案。它用于以平滑的方式改变变量的值,并且它非常适合平滑3DObjects动画。
http://learningthreejs.com/blog/2011/08/17/tweenjs-for-smooth-animation/相关文章:
- 关键帧之间的css3动画延迟
- 如何在打开层3中的堇青石之间设置矢量图标的动画
- jQuery淡入淡出动画在两者之间显示白色
- 如何在两个动画画布元素之间进行通信
- 在两个值之间插值或“补间”(但不进行动画处理)
- 在要设置动画的所有方法之间进行选择
- 制作AngularJS路线之间的英雄元素动画
- 在Raphael JS中,不透明度:0和开始动画到不透明度:1之间的延迟
- 设置标记之间多段线的动画-Mapbox
- 如何使用ngAnimate在CSS类之间设置动画
- 为什么chromecast在动画帧之间需要这么长时间
- 在两个未知值之间切换 JQuery 动画
- 如何在 CSS3 中的动画之间保持状态
- 仅使用 CSS 即可在位置之间制作动画
- JS谷歌地图API v3动画标记之间的坐标
- 在图表 svg 条形图上的值之间设置动画转换
- D3:对两个节点之间的圆进行动画处理
- CSS 过渡:在“高度”样式属性的内联样式之间设置动画
- 如何在多个CSS动画之间切换
- 动画.css动画之间的延迟