2016-11-19 3 views
0

ich mit folgendem Code begann auf eine XZ-Scheibe eine Bot Bewegung zu haben, die einen Block erstellt, die auf einer geraden Linie bewegt:versuchen zufällig mit Threejs

const bot_geometry = new THREE.BoxGeometry(1,1,1); 
const bot_material = new THREE.MeshBasicMaterial({color: 0x7777ff, wireframe: false}); 
const bot = new THREE.Mesh(bot_geometry, bot_material); 

bot.position.x = 1; 
bot.position.y = 0; 
bot.position.z = 1; 
scene.add(bot); 

//create random directions for bot 
let direction = new THREE.Vector3(0.001, 0, 0.002); // amount to move per frame 

    function animate() { 
       bot.position.add(direction); // add to position 
       requestAnimationFrame(animate); // keep looping 
      } 
requestAnimationFrame(animate); 

ich versuche es zufällig auf dem machen bewegen Flugzeug und versuchte, die folgenden zwei Linien für die Richtung zu verwenden, aber jetzt habe ich zwei Blöcke, die sich auf einer geraden Linie entgegengesetzt von einander bewegen. Gibt es eine einfache Möglichkeit, ein Bot bewegen zufällig auf der Ebene haben ?:

let reverseDirection = Math.floor(Math.random()*2) == 1 ? 1 : -1; 
let direction = new THREE.Vector3(0.001*reverseDirection, 0, 0.002*reverseDirection); 

Antwort

0

Sie zufällige Richtung wie diese

direction = new THREE.Vector3(Math.random() * 2 - 1, 0, Math.random() * 2 - 1).normalize(); 

auch festlegen können, können Sie globale Variablen

var direction; 
var speed = 5; // units per second 
var clock = new THREE.Clock(); 
var delta; 
var shift = new THREE.Vector3(); 
einstellen

und in Ihrer Animationsschleife

delta = clock.getDelta(); 
shift.copy(direction).multiplyScalar(delta * speed); 
bot.position.add(shift); 

jsfiddle Beispiel

+2

'clone()' ruft 'new' auf. Vermeiden Sie unnötige Aufrufe von 'clone()' oder 'new' in der Animationsschleife. – WestLangley

+1

Ja. Sehr richtig. Danke für das Zeigen, @WestLangley – prisoner849