使用相同的功能加载多个对象

时间:2015-04-03 17:16:59

标签: javascript three.js

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

1 个答案:

答案 0 :(得分:0)

你不是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

{{1}}

请记住,对于带回调的异步方法,“2”下面的代码可以在“1”下的代码之前执行