2012-12-06 96 views
6

我在訪問事件邊界外的對象時遇到了問題。如果我把對象放在一個數組中,並檢出該數組,數組也是空的,但在事件範圍內它已滿。我需要知道如何訪問事件範圍外的對象。THREE.js OBJ加載器對象

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

您至少應該將循環的文件行移到它外面。您可以將許多偵聽器添加到一個加載器中,但是如果您在循環中重新定義該對象,則每次都會替換它。用這個更新這個問題,這樣你可以得到更好的答案。 – recluze

回答

2

這不是關於範圍;它是空的,因爲您需要等待加載器加載對象,然後才能看到樹 - 這就是addEventListener(「加載」)的作用。代碼片段的最後一行在加載函數之前執行。

你的代碼片段令人困惑,它並不是立即顯示你正在嘗試使用for循環。您正在創建許多加載器並將加載事件偵聽器附加到它們。但是你的loader.load()調用在循環之後,所以它將應用於最後的加載器。您可能想要將加載器對象創建移動到for循環之外或循環內的loader.load調用。

+0

** loader.load()**在循環中,所以這適用於每個加載器。其次我沒有循環嘗試,但沒有工作。我製作了循環,因爲我需要一次又一次加載對象,因爲我需要將樹對象放置在我的遊戲中不同的地方。 –

相關問題