【问题标题】:Three.js loading order三.js加载顺序
【发布时间】:2012-10-15 22:05:59
【问题描述】:

我的 Three.js Json-Loader 有问题。我有一些对象,它们的路径保存在一个数组中。 现在我想加载它们并将它们排序在一个列表中,以便我可以选择它们。 但是它们的加载顺序与加载后它们在我的数组中的顺序不同,因为它们的大小不同,所以小的在第一个,大的在最后。所以加载它们后,我不知道对象的名称(名称是路径)。
我的代码:

for(var j=0;j<21;j++){
        var path = objPath[j];
        loader.load( path, function( geometry ) { save(geometry, path); } );
    }


使用此代码,路径被提供给保存方法,但始终存在最后一个 (objPath[20]) 路径,因为 for 循环比加载方法快。 我该怎么做才能让路径正确?

【问题讨论】:

  • 我知道,但我会在数组中有几千个 obj,而且时间会太长。
  • @Neil,您的意思是同步,因为在这种情况下,并行和异步几乎是一回事?无论如何,一个接一个地加载是懒人的解决方案(谁不想找到真正的问题),并且会增加加载时间。
  • 我也想过这个问题,但就像tapio说的那样,我正在寻找真正的解决方案。

标签: javascript three.js


【解决方案1】:

你被一个涉及 JavaScript 闭包规则的相当常见的错误所困扰,请参阅this link。简而言之,要获取传递给保存函数的正确路径,需要将其包装成一个辅助函数工厂,如下所示:(或如上链接所示)

function saveHelper(path) {
    return function(geometry) {
        save(geometry, path);
    }
}

for(var j=0;j<21;j++){
    var path = objPath[j];
    loader.load( path, saveHelper(path) );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-24
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2018-04-04
    • 2012-01-01
    相关资源
    最近更新 更多