Javascript 在ThreeJS中加载多个OBJ文件并设置其位置时出现问题

Javascript 在ThreeJS中加载多个OBJ文件并设置其位置时出现问题,javascript,position,loading,Javascript,Position,Loading,我想加载一些OBJ文件,并将它们放置在机械部件的特定位置。我可以做一些片段,比如 { const objLoader = new OBJLoader(); objLoader.load('obj/'+'AA2.obj', function(object) { object.traverse( function ( child ) { if ( child instanceof THREE.Mesh ) child.material.color.

我想加载一些OBJ文件,并将它们放置在机械部件的特定位置。我可以做一些片段,比如

{
  const objLoader = new OBJLoader();
  objLoader.load('obj/'+'AA2.obj', function(object) { 
    object.traverse( function ( child ) {
       if ( child instanceof THREE.Mesh )
          child.material.color.setRGB (0.6,0.3,0.3); 
   });
  object.position.x=-1065.4;
  object.position.y=700.0;
  object.position.z=-937.1;
  scene.add( object );
  })
}
这个很好用

但我想在一个循环中这样做。我正在使用阵列:

const parts = [
  ['AA1',-1065.4,0.0,-937.1,0.6,0.3,0.3],
  ['AA2',-1065.4,700.0,-937.1,0.6,0.3,0.3],
  ['AB1',-225.0,0.0,-937.1,0.6,0.3,0.3],
  ['AB2',225.0,0.0,-937.1,0.6,0.3,0.3],
  ...
  ];
然后我循环使用:

for (var i = 0;i < parts.length; i++) {
    const objLoader = new OBJLoader();
    objLoader.load('obj/'+parts[i][0]+'.obj', function(object) {
      object.traverse( function ( child ) {
        if ( child instanceof THREE.Mesh )
          child.material.color.setRGB (parts[i][4], parts[i][5], parts[i][6]);
        });
      object.position.x=parts[i][1];
      object.position.y=parts[i][2];
      object.position.z=parts[i][3];
      scene.add( object );
    })         
  }
for(变量i=0;i
这是失败的,因为所有对象都有相同的最终颜色,并且都设置为 位置0

控制台中没有错误消息。我做错了什么?这个有吗 与异步加载有关吗

谢谢


Dennis

问题是,在调用回调函数时,循环已经完成了它的工作,并为
i
设置了最后一个值。这就是为什么你总是看到相同的颜色。下面是一个类似的例子。作为一种解决方案,只需将
var
替换为
let

for(变量i=0;i<10;i++){
setTimeout(()=>console.log('var:',i),100)
}
for(设i=0;i<10;i++){
setTimeout(()=>console.log('let:',i),100)
}