【问题标题】:THREE.js OBJ Loader Objects三个.js OBJ 加载器对象
【发布时间】:2012-11-24 10:56:45
【问题描述】:

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

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.

【问题讨论】:

  • 您至少应该将循环的文件行移到它之外。我认为您可以将许多侦听器添加到一个加载器,但是如果您在循环中重新定义对象,它每次都会被替换。用这个更新问题,以便您得到更好的回答。

标签: javascript html webgl three.js


【解决方案1】:

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

您的代码 sn-p 令人困惑,您试图用 for 循环做什么并不是很明显。您正在创建许多加载器并将加载事件侦听器附加到它们。但是您的 loader.load() 调用是在循环之后,因此它将应用于最后一个加载器。您可能希望将 loader 对象的创建移到 for 循环之外,或者将 loader.load 调用移到循环内。

【讨论】:

  • loader.load() 在循环中,所以这适用于每个加载器。其次,我在没有循环的情况下尝试了这个,但这也不起作用。我制作了循环,因为我想一次又一次地加载对象,因为我需要将树对象放置在我的游戏中的不同位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多