2016-02-03 21 views
0

目前,我在加載之前給網格物體分配名稱時遇到了問題。我的代碼如下,並且對象的名稱(以及位置)總是取數組中最後一個模型的值。如何加載和管理許多threejs對象?

你有什麼想法如何解決它?謝謝:)

for (var model in scenario_models) 
{ 
    var id = model.id; 
    var loader = new THREE.OBJMTLLoader(); 
    loader.load('/static/models/building_models/ZehYO2qAzU7wm6HfCeIVJC62EQQqW0wv8h4pa0TzhAtSm9qoL6/male02.obj', 
     '/static/models/building_models/ZehYO2qAzU7wm6HfCeIVJC62EQQqW0wv8h4pa0TzhAtSm9qoL6/male02.mtl', 
     function (object) 
    { 
     object.name = model.id; 
     object.position.x = model.x; 
     object.position.y = model.y; 
     object.position.z = model.z; 
     scene.add(object); 
    }); 
} 
+0

http://stackoverflow.com/questions/12896836/three-js-loading-order – 2pha

回答

0

通俗易懂的解決方案,使用中間功能:

for (var model in scenario_models) { 

    var obj = 'obj/male02/male02.obj', 
    mtl = 'obj/male02/male02_dds.mtl'; 

    load(obj, mtl, model); 

} 

function load(url, mtl, model) { 

    var loader = new THREE.OBJMTLLoader(); 

    loader.load(url, mtl, function (object) { 
     object.name = model.id; 
     object.position.x = model.x; 
     object.position.y = model.y; 
     object.position.z = model.z; 
     scene.add(object); 
    }); 
} 

還是替代解決方案使用閉包:

for (var model in scenario_models) { 
    (function(x) { 
     if (scenario_models.hasOwnProperty(x)) { 
     var loader = new THREE.OBJMTLLoader(); 
     var obj = 'obj/male02/male02.obj', 
     mtl = 'obj/male02/male02_dds.mtl'; 

     var model = scenario_models[x]; 

     loader.load(obj, mtl, function (object) { 
      object.name = model.id; 
      object.position.x = model.x; 
      object.position.y = model.y; 
      object.position.z = model.z; 
      scene.add(object); 
     }); 
     } 
    })(model); 
} 

經過測試與Threejs r73。