0

我正在尝试使用 tween.js 链接一些动画,但是我发现它无法正常工作。

var car={position:{x:100}};

var tween1 = new TWEEN.Tween(car.position)
.to({x: 105}, 1000).onComplete(() => {console.log("done 1 second")}); 
var tween2 = new TWEEN.Tween(car.position)
.to({x: 110}, 1000).onComplete(() => {console.log("done 2 second")}); 
var tween3 = new TWEEN.Tween(car.position)
.to({x: 115}, 1000).onComplete(() => {console.log("done 3 second")}); 

tween1.chain(tween2).chain(tween3).start()

setTimeout(() => {
    console.log(1);
},1000);
setTimeout(() => {
    console.log(2);
}, 2000);
setTimeout(() => {
    console.log(3);
}, 3000);

function animate() {
TWEEN.update();
window.requestAnimationFrame(animate);
}
animate();
<script src="https://cdnjs.cloudflare.com/ajax/libs/tween.js/18.6.4/tween.umd.js"></script>

并且对于 3 个补间中的每一个都需要 1 秒。但不知何故,图书馆在第一个之后合并了补间......

http://jsfiddle.net/6gfkenw2/

有谁知道如何解决这一问题?

4

1 回答 1

1

这里没有专家,但似乎您需要先链接tween3到,tween2然后再将其链接到tween1


所以改为关闭

tween1.chain(tween2).chain(tween3).start()

利用

tween1.chain(tween2.chain(tween3)).start()

所以输出变成

1
done 1 second
2
done 2 second
3
done 3 second

var car={position:{x:100}};

var tween1 = new TWEEN.Tween(car.position)
.to({x: 105}, 1000).onComplete(() => {console.log("done 1 second")}); 
var tween2 = new TWEEN.Tween(car.position)
.to({x: 110}, 1000).onComplete(() => {console.log("done 2 second")}); 
var tween3 = new TWEEN.Tween(car.position)
.to({x: 115}, 1000).onComplete(() => {console.log("done 3 second")}); 

tween1.chain(tween2.chain(tween3)).start()

setTimeout(() => {
    console.log(1);
},1000);
setTimeout(() => {
    console.log(2);
}, 2000);
setTimeout(() => {
    console.log(3);
}, 3000);

function animate() {
TWEEN.update();
window.requestAnimationFrame(animate);
}
animate();
<script src="https://cdnjs.cloudflare.com/ajax/libs/tween.js/18.6.4/tween.umd.js"></script>

于 2022-01-20T19:52:02.733 回答