2012-12-06 10 views
6

Ich habe ein Problem beim Zugriff auf das Objekt außerhalb der Ereignisgrenzen. Wenn ich das Objekt in ein Array setze und dieses Array auschecke, ist das Array ebenfalls leer, aber im Ereignisbereich ist es voll. Ich muss wissen, wie ich auf das Objekt außerhalb des Ereignisbereichs zugreifen könnte.THREE.js OBJ Loader Objekte

for (var i = 0; i < 19; i++){ 
    var loader = new THREE.OBJMTLLoader(); 

    loader.addEventListener('load', function (event) { 
     var tree = event.content; 
     myWorld.setWorldTreePosition(multiplier); 

     tree.position.y = 0; 
     tree.position.x = myWorld.myTreePosition.position.x; 
     tree.position.z = myWorld.myTreePosition.position.z; 
     tree.rotation.x = -(Math.PI/2); 
     tree.scale.set(10,5,5); 
     scene.add(tree); 
     collidableMeshList2.push(tree); 

     tree.castShadow = true; 
     //collidableMeshList.push(tree); 
     multiplier += 500; 

     console.log(collidableMeshList2); // here it is full of trees. 
    } 
); 

loader.load('obj/Palm_Tree.obj', 'obj/Palm_Tree.mtl'); 
//outside this all becomes empty. 

console.log(collidableMeshList2); // here is list is empty but I don't know why. 
+0

Sie sollten zumindest die Dateizeile der Schleife außerhalb davon verschieben. Sie können einem Loader viele Listener hinzufügen, aber wenn Sie das Objekt in der Schleife neu definieren, wird es jedes Mal ersetzt. Aktualisieren Sie die Frage damit, damit Sie bessere Antworten erhalten. – recluze

Antwort

2

Es geht nicht um den Umfang; Es ist leer, weil Sie warten müssen, bis der Loader das Objekt lädt, bevor Sie die Bäume dort sehen - was der addEventListener ("load") tut. Die letzte Zeile Ihres Code-Snippets wird vor Ihrer Ladefunktion ausgeführt.

Ihr Code-Snippet ist verwirrend, es ist nicht sofort ersichtlich, was Sie mit der for-Schleife zu tun versuchen. Sie erstellen viele Loader und fügen ihnen Load-Ereignis-Listener hinzu. Aber Ihr loader.load() - Aufruf ist nach der Schleife, also wird es auf den letzten Lader angewendet. Wahrscheinlich möchten Sie Ihre Loader-Objekt-Erstellung außerhalb der for-Schleife oder des loader.load-Aufrufs innerhalb der Schleife verschieben.

+0

** loader.load() ** ist mit in der Schleife so das gilt für jeden Lader. Zweitens habe ich das ohne Loop versucht, aber das hat auch nicht funktioniert. Ich machte die Schleife so, wie ich Objekt immer wieder laden möchte, wie ich das Baumobjekt in meinem Spiel an verschiedenen Orten platzieren musste. –

Verwandte Themen