【问题标题】:three.js - add multiple objects (obj & mtl) with a loopthree.js - 使用循环添加多个对象(obj 和 mtl)
【发布时间】:2015-03-16 16:15:33
【问题描述】:

我的代码有问题,我找不到错误...我有一个循环加载多个 obj 并为它们命名,但结果“对象”数组为空.. .我想给每个对象一个名字,以便检测交叉点(代码可以)。这非常棘手,因为当我单击加载对象(大教堂)的不同部分时,会联系数据库,但所有对象都具有相同的名称。你知道为什么吗 ?这是代码:objects是存储所有几何图形的数组,object是函数的参数。 load_obj 由下面的循环定义(字符串存储在另一个数组中:OBJETS,其中存储了大教堂所有部分的 obj 名称)。

for (var i in OBJETS){   
load_obj = OBJETS[i];
loader.load('./Donnees/OBJ/'+load_obj+'.obj','./Donnees/OBJ/'+load_obj+'.mtl', function ( object ) { 
      object.name=load_obj;         
      scene.add( object );      
      objects.push(object);     }, onProgress, onError );       
}

感谢您的帮助!

【问题讨论】:

  • 我不能说出了什么问题,因为它非常缺乏信息,但是您可以尝试使用 debugger 语句和 console.log 来调试此代码以查看发生了什么步骤一步一步。如果您对如何使用这些工具有任何疑问,请在此处填写免费提问

标签: javascript arrays loops three.js


【解决方案1】:

这是因为 javascript 是一种异步语言。

基本上都是异步调用load函数,然后for循环继续执行。所以,最后,for 循环停止,load_obj 变量是最后一个 OBJET 的名称

This link 有助于解决这个问题

for (var i in OBJETS){ 
    (function(index){
        load_obj = OBJETS[index];
        loader.load( './Donnees/OBJ/' + load_obj + '.obj', './Donnees/OBJ/' + load_obj + '.mtl', function ( object ) { 
            object.name=load_obj;         
            scene.add( object );      
            objects.push(object);     
        }, onProgress, onError ); 
    })(i);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-15
    • 2017-07-17
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多