2016-04-11 47 views
1

我想爲此對象執行補間位置,一旦它完成,就會淡出......現在,我只是在完成後才隱藏它。漸變對象在補間位置完成後不可見

this.tweenBox2.onUpdate(function() 
{ 
      that.box.position = a; 
      that.box.Show(); 
}); 
this.tweenBox2.onComplete(function() { 
      for (var i = 0; i < that.box.children.length; i++) { 
       that.box.children[i].visible = false; 
      } 
      that.box.position = new THREE.Vector3().copy(storagePos); 
}); 

這裏是裏面是什麼box.children [0]

THREE.Mesh 

webglActive : 真正 __webglInit : 真正 _modelViewMatrix : THREE.Matrix4 _normalMatrix : castShado。THREE.Matrix3 castShado w^ : 假 孩子 : 數組[0] eulerOrder : (...) frustumCulled : 真正 幾何 : THREE.Geometry ID :材料 : THREE .MeshLambertMaterial matrix : THREE.Matrix4 matrixAutoUpdate : 真正 matrixWorld : THREE.Matrix4 matrixWorldNeedsUpdate : 假 名 : 「」 父 : 箱 位置 : THREE.Vector3 四元 : THREE.Quaternion receiveShadow : 假 renderDepth : null 旋轉 : THREE.Euler rotationAutoUpdate : 真正 規模 : THREE.Vector3 了 : THREE.Vector3 useQuaternion : (...) 用戶數據 : 對象 UUID : 「9C6DC789-20D0-4F9F-88B6-CDA9A2C372B9」 visible : true __proto : 三。Object3D

的材料產生這樣:當您創建的材料,爲您框,你需要它的透明度設置爲true

var box = boxModel.scene.children[3].children[0].clone(); 
box.traverse(function (child) 
{ 
    if (child instanceof THREE.Mesh) 
    { 
     child.material = child.material.clone(); 
    } 
}); 
+0

我看到你在克隆一種材料,但是當你第一次創建它時,你是否將透明設置爲true? – leota

回答

0

material = new THREE.MeshPhongMaterial({color: 0x00ff00, transparent: true}); 

我使用的是PhongMaterial但沒關係。

然後在您的onUpdate功能爲你的位置你可以更改其不透明度:

this.tweenBox2.onUpdate(function() 
{ 
      that.box.position = a; 
      //This will fade the opacity from 0 to 1 
      //NOTE: I'm considering "box" as a THREE.Mesh 
      that.box.material.opacity = 0; 

      that.box.Show(); 
}); 

我不認爲你需要的onComplete功能。

更新1: 我創建存儲的不透明度值的全局變量:

var opacityVar = 1; 

然後淡出功能:

function fadeOut(){ 

    if(opacityVar >= 0){ 

     mesh.material.opacity = opacityVar; 
    } 
} 

而在渲染功能我更新不透明度var並調用fadeOut,您應該在您的onComplete函數中調用:

function render() { 

    camera.lookAt(scene.position); 

    renderer.render(scene, camera); 

    opacityVar -= 0.01; //Update opacity var 

    fadeOut(); //Call FadeOut 

} 
+0

補間不能這樣工作,它會直接將不透明度設置爲0,但感謝您的財產不透明。 – Carlosss

+0

對不起,我正在使用另一個Tween庫,它隨着時間的推移執行補間fx。無論如何,我正在用一個可以幫助你的功能更新答案 – leota

+0

謝謝,我意識到改變它的透明度並沒有做任何事情,也許是因爲它是一個不透明度爲1的另一個對象的孩子?你會知道它會如何工作嗎? – Carlosss