THREE.js OBJ Loader对象

Naj*_*qib 6 javascript html5 webgl three.js

我有一个关于访问事件边界之外的对象的问题.如果我将对象放在一个数组中并检出该数组,那么该数组也是空的,但在事件范围内它已满.我需要知道如何访问事件范围之外的对象.

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.
Run Code Online (Sandbox Code Playgroud)

yak*_*aku 2

这与范围无关;而是与范围有关。它是空的,因为您需要等待加载器加载对象,然后才能看到其中的树 - 这就是 addEventListener("load") 的作用。代码片段的最后一行在加载函数之前执行。

您的代码片段很混乱,无法立即看出您要使用 for 循环做什么。您正在创建许多加载程序并向它们附加加载事件侦听器。但是您的 loader.load() 调用是在循环之后,因此它将应用于最后一个加载器。您可能希望将加载器对象的创建移至 for 循环之外,或将 loader.load 调用移至循环内。