繁体   English   中英

THREE.js OBJ加载程序对象

[英]THREE.js OBJ Loader Objects

我在访问事件边界之外的对象时遇到问题。 如果将对象放入数组中并检出该数组,则该数组也为空,但在事件范围内它已满。 我需要知道如何访问事件范围之外的对象。

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.

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

您的代码段令人困惑,但是您对于使用for循环所做的工作并不能立即看出来。 您正在创建许多加载程序,并将加载事件侦听器附加到它们。 但是您的loader.load()调用在循环之后,因此它将应用于最后一个加载器。 您可能需要将创建加载程序对象移至for循环外,或者将loader.load调用移至循环内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM