2

コールバック関数を介してオブジェクトを渡そうとして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();                 

   }    
}
4

3 に答える 3

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()を保持するクロージャーが作成されるため、ハンドラーは正しいグループを取得します。grouponUpdate()

または、同じことを行う別の方法:

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そこで必要な値を取得していますか、それとも問題ですか?

于 2013-04-16T08:53:22.093 に答える