three.js - 用循环添加多个对象(obj& mtl)

时间:2015-01-18 15:28:37

标签: javascript arrays loops three.js

我的代码中有问题而且我找不到错误...我有一个循环加载多个obj并给它们一个名字,但结果“objects”数组为空。我想给每个对象一个名字,以便检测交叉点(代码就可以了)。这非常棘手,因为当我点击加载对象(大教堂)的不同部分时,会联系数据库,但所有对象都具有相同的名称。你知道为什么吗 ?下面是代码: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 );       
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

原因是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);
}