0

当我处理重型模型时,我试图在加载 JSON 时动态显示加载百分比,所以我使用loadAjaxJSON 方法进行了粗略测试......

以下加载返回加载期间的百分比,但永远不会到达回调函数。

是由于缺少声明、错误的上下文参数还是其他原因?我找不到关于那个的文档。

var loader = new THREE.JSONLoader( true );
loader.loadAjaxJSON(
            document,           // < context ??
            'try.js',
            function ( geometry, materials ) { CreateScene( geometry, materials ); },
            false,              // < texturePath
            function( progress, result ) { console.log((progress.loaded / progress.total * 100).toFixed());}
            )

安慰 :

7 13 20 .. 100
TypeError: a.parse is not a function [three.min.js (ligne 204)]
4

1 回答 1

4

有时,查看源代码而不是查找文档会更快。这是 JSONLoader 的代码:https ://github.com/mrdoob/three.js/blob/master/src/loaders/JSONLoader.js 。如您所见,上下文应该包含两个方法:parse 和 onLoadComplete。基本上你只需要将加载器作为上下文发送,查看 loadAjaxJSON 的快捷方式 - 方法加载。关于 texturePath,同样在方法 load 中你可以看到它的样子:

texturePath = texturePath && ( typeof texturePath === "string" ) ? texturePath : this.extractUrlBase( url );

如果您看得更深入,您会看到 extractUrlBase 将返回“./”,因此在您的情况下,您的代码应如下所示:

var loader = new THREE.JSONLoader( true );
loader.loadAjaxJSON(
        loader,           // context 
        'try.js',
        function ( geometry, materials ) { CreateScene( geometry, materials ); },
        './', // texturePath or loader.extractUrlBase('try.js'), 
        function( progress, result ) { console.log((progress.loaded / progress.total * 100).toFixed());}
        )
于 2013-05-08T09:53:41.473 回答