我正在尝试通过回调函数onUpdateTween( groups[i], this );
传递一个对象,但它没有给我正确的对象。它只给出了groups数组中的最后一个对象。我该如何解决这个问题?
function transform( duration ) {
for ( var i = 0; i < groups.length ; i ++ ) {
new TWEEN.Tween(object.rotation)
.to( rot , duration )
.easing( TWEEN.Easing.Exponential.InOut )
.onUpdate( function() {
onUpdateTween( groups[i], this );
})
.start();
}
}
答案 0 :(得分:1)
您应该创建一个本地范围以封装此变量:
function transform( duration ) {
for ( var i = 0; i < groups.length ; i ++ ) {
new TWEEN.Tween(object.rotation)
.to( rot , duration )
.easing( TWEEN.Easing.Exponential.InOut )
.onUpdate( updateTween(i, this) )
.start();
}
}
function updateTween(index, object) {
return function() {
onUpdateTween( groups[index], object );
}
}
答案 1 :(得分:1)
只需在循环中调用一个函数:
function transform( duration ) {
for ( var i = 0; i < groups.length; i ++ ) {
transformGroup( groups[i] );
}
function transformGroup( group ) {
new TWEEN.Tween(object.rotation)
.to( rot, duration )
.easing( TWEEN.Easing.Exponential.InOut )
.onUpdate( function() {
onUpdateTween( group, this );
})
.start();
}
}
每次调用transformOne()
函数时,它都会创建一个包含group
参数的闭包,以便onUpdate()
处理程序获得正确的组。
或者做同样事情的另一种方式:
function transform( duration ) {
for ( var i = 0; i < groups.length; i ++ ) {
transformGroup( groups[i], duration );
}
}
function transformGroup( group, duration ) {
new TWEEN.Tween(object.rotation)
.to( rot, duration )
.easing( TWEEN.Easing.Exponential.InOut )
.onUpdate( function() {
onUpdateTween( group, this );
})
.start();
}
无论哪种方式都可行。
this
是否获得了您需要的价值,或者这也是一个问题?
答案 2 :(得分:0)
function transform( duration ) {
for ( var i = 0; i < groups.length ; i ++ ) {
with({i:i}) {
new TWEEN.Tween(object.rotation)
.to( rot , duration )
.easing( TWEEN.Easing.Exponential.InOut )
.onUpdate( function() {
onUpdateTween( groups[i], this );
})
.start();
}
}
}
:d