2013-09-26 2 views
2

В three.js У меня есть космический корабль в xyz, а id нравится летать к сетчатому объекту планеты в xyz.Враг Три.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 (квадрат будет лететь к сфере после 5 секунд) с преимущественным этим кодом:

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, но я не мог на всю жизнь понять, как приостановить отмену обновления или изменить анимацию. казалось, как только он был установлен, он был установлен в камне. –

Смежные вопросы