2013-09-26 132 views
2

在three.js中,我在xyz有一艘太空飛船,並且id喜歡它在xyz上飛向一個行星的網格物體。Three.js敵人向玩家移動

我不能爲我的生活想出解決辦法。

需要以恆定的速度向行星方向行進。

回答

1
updateFcts.push(function(delta, now){ 

    if (shipArr[0]===undefined){ 
}else{ 

     //create two vector objects 
var xd = new THREE.Vector3(marsMesh.position.x,marsMesh.position.y,marsMesh.position.z); 
var yd = new THREE.Vector3(shipArr[0].position.x,shipArr[0].position.y,shipArr[0].position.z); 
//find the distance/hypotnuse to the xyz location 
var dicks = shipArr[0].position.distanceTo(marsMesh.position); 

var subvec = new THREE.Vector3(); 
    subvec = subvec.subVectors(xd,yd); 
    //sub subtrac the 3 vectors. 
    var hypotenuse = dicks; 
    console.log(hypotenuse); 
    //1.5 stops it at 1.5 distance from the target planet 


     if(hypotenuse > 1.5){ 
     //console.log(hypotenuse); 

    shipArr[0].position.y += .0001*200*(subvec.y/hypotenuse); 
    shipArr[0].position.x += .0001*200*(subvec.x/hypotenuse); 
    shipArr[0].position.z += .0001*200*(subvec.z/hypotenuse); 
    }else{ 
    //within fire range 
    alert ("FIIIIIRE"); 

    } 


} 

}) 

我試了tween.js,並不高興,所以我編寫了一個函數我自己。

0

你可以使用https://github.com/sole/tween.js這是專注於此。

一個非常簡單的例子http://jsfiddle.net/qASPe(方將飛向5S後球)與主要驗證碼:

new TWEEN.Tween(ship.position) 
    .to(planet.position, 700) // destination, duration 
    .start(); 

之後,你可能想使用一個THREE.Curve,或其他路徑機制,作爲「飛」喜歡這裏http://jsfiddle.net/aevdJ/12

// create a path 
var path = new THREE.SplineCurve3([ 
    ship.position, 
    // some other points maybe? representing your landing/takeoff trajectory 
    planet.position 
]); 

new TWEEN.Tween({ distance:0 }) 
    .to({ distance:1 }, 3000) // destination, duration 
    .onUpdate(function(){ 
     var pathPosition = path.getPointAt(this.distance); 
     ship.position.set(pathPosition.x, pathPosition.y, pathPosition.z); 
    }) 
    .start(); 

在所有情況下的路徑,不要忘了在你的更新功能加入這一行

TWEEN.update(); 
+0

謝謝你,我試了tween.js,但我不能爲我的生活弄清楚如何暫停取消更新或改變補間。看起來好像一旦它被設定,它就成了石頭。 –