我对Three JS和Tween JS真的很陌生。我为我的项目拿起了它,最近感到沮丧。我在尝试补间object1时遇到了麻烦。场景中还有其他对象。 object2,obeject3等。我不确定是否还要向mtlLoaders和objLoaders添加数字。

var mtlLoader = new THREE.MTLLoader( );
mtlLoader.transparency = true;
mtlLoader.setBaseUrl( 'assets/' )
mtlLoader.setPath( 'assets/' );
mtlLoader.load( 'exterior.mtl', function ( materials )
{
materials.side = THREE.DoubleSide;
materials.preload();

materials.opacity = 0
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials( materials );
objLoader.setPath( 'assets/' );
objLoader.load( 'exterior.obj', function ( object1 )

{
object1.position.y = .01
object1.position.z = -8
object1.scale.set( .04, .04, .04 );
object1.castShadow = true;
object1.receiveShadow = true;


scene.add( object1 );


}, onProgress, onError );

});

document.getElementById("engage").onclick =     function engage()
{
test.start()
};


这是我的补间。我不希望补间立即开始,因为我希望它在按下按钮时开始。

var test = new TWEEN.Tween(object1.position).to({ x: 1, y: 0, z: 0 }, 2000);
    test.easing(TWEEN.Easing.Quartic.InOut);


当我将补间放在scene.add( object1 )之后并立即启动时,补间似乎可以正常工作,但是我希望它在单击按钮时开始。任何帮助表示赞赏。

最佳答案

object1onLoad回调函数范围内的局部变量。参见此SO answer。而且我还可以通过以下方式将事件监听器添加到按钮:

document.getElementById("engage").addEventListener("click", engage, false);

function engage() {
    test.start();
};

关于javascript - 无法补间OBJLoader中的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40876273/

10-15 08:37