我的代码中有问题而且我找不到错误...我有一个循环加载多个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 );
}
感谢您的帮助!
答案 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);
}