正在加载具有相同功能的多个对象

Loading multiple objects with the same function

本文关键字:功能 对象 加载      更新时间:2023-09-26

我必须加载一些模型,并希望能够从加载程序外部访问它们。当我试图遵循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:对象不是THRE.Object3D的实例。未定义

您并不是return,而是来自loadObject的您所认为的。loader.load的第三个参数是回调;它可能是异步调用的。load本身不返回任何内容,这就是为什么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"下的代码之前执行