2012-12-06 101 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()**在循环中,所以这适用于每个加载器。其次我没有循环尝试,但没有工作。我制作了循环,因为我需要一次又一次加载对象,因为我需要将树对象放置在我的游戏中不同的地方。 –

相关问题