目前我遇到在加载网格对象之前为网格对象指定名称的问题。我有如下代码,对象的名称(以及位置)总是取数组中最后一个模型的值。
你知道如何解决它吗?谢谢:))
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 :(得分: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进行测试。