加载具有相同功能的多个对象
Loading multiple objects with the same function
我必须加载几个模型并希望能够从加载器外部访问它们。当我尝试遵循 DRY 规则时,我想创建一个函数来加载和返回对象。
function loadObject(obj, mtl) {
var loader = new THREE.OBJMTLLoader();
return loader.load( obj, mtl, function ( object ) {
return object;
});
}
但在主函数中使用后
var box = loadObject('box.obj', 'box.mtl');
scene.add(box);
我得到:
THREE.Object3D.add: object not an instance of THREE.Object3D.
undefined
你并不是 return
你认为自己来自 loadObject
的样子。 loader.load
的第三个参数是回调;它可能是异步调用的。 load
本身没有 return 任何东西,这就是 box
最终成为 undefined
的原因。您可能应该将加载完成时应该发生的事情传递给 loadObject
:
function loadObject(obj, mtl, onSuccess) {
var loader = new THREE.OBJMTLLoader();
loader.load(obj, mtl, onSuccess);
}
var box = loadObject('box.obj', 'box.mtl', function(box) {
// 1
scene.add(box);
});
// 2
more code
请记住,对于带回调的异步方法,“2”下的代码可以在“1”下的代码之前执行。
我必须加载几个模型并希望能够从加载器外部访问它们。当我尝试遵循 DRY 规则时,我想创建一个函数来加载和返回对象。
function loadObject(obj, mtl) {
var loader = new THREE.OBJMTLLoader();
return loader.load( obj, mtl, function ( object ) {
return object;
});
}
但在主函数中使用后
var box = loadObject('box.obj', 'box.mtl');
scene.add(box);
我得到:
THREE.Object3D.add: object not an instance of THREE.Object3D. undefined
你并不是 return
你认为自己来自 loadObject
的样子。 loader.load
的第三个参数是回调;它可能是异步调用的。 load
本身没有 return 任何东西,这就是 box
最终成为 undefined
的原因。您可能应该将加载完成时应该发生的事情传递给 loadObject
:
function loadObject(obj, mtl, onSuccess) {
var loader = new THREE.OBJMTLLoader();
loader.load(obj, mtl, onSuccess);
}
var box = loadObject('box.obj', 'box.mtl', function(box) {
// 1
scene.add(box);
});
// 2
more code
请记住,对于带回调的异步方法,“2”下的代码可以在“1”下的代码之前执行。