javascript - THREE.js OBJ 加载器对象

标签 javascript html 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.

最佳答案

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

您的代码片段令人困惑,无法立即看出您尝试使用 for 循环执行的操作。您正在创建许多加载程序并将加载事件监听器附加到它们。但是您的 loader.load() 调用在循环之后,因此它将应用于最后一个加载程序。您可能希望将加载程序对象的创建移到 for 循环之外,或者将 loader.load 调用移到循环内。

关于javascript - THREE.js OBJ 加载器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13743176/

相关文章:

javascript - 在 Java 脚本中访问已解析的 JSON 响应中的数组

javascript - 避免在列表中显示未定义的数据

html - 在电子商务网站的购物车/结帐页面使用表格或 div/css,请告诉我

html - 树形表jsp自定义标签

javascript - 菜单项上的透明三 Angular 形

javascript - Three.js MultiplyVector3 Deprecated 如何替换

glsl - WebGL 是否支持 1D 纹理?

javascript - 如何防止更改复选框的父单击事件

javascript - Websocket : send messages and notifications to all clients except sender

math - 尝试理解 WebGL 中透视矩阵背后的数学原理