我试图做的是:负荷大量的模型For循环
- 从服务器获取一个
JSON
文件,其中包含有关我的模型数据 - 使用帘布装载机里面一个for循环将它们添加到现场
- 它们添加到一个数组
这里是我的功能:
function getJSON(callback) {
var temp = $.getJSON("data/data.json", function(data) {
//execute the callback, passing it the data
callback(data);
});
}
function loadModels() {
//get our JSON
getJSON(function(data) {
//evaluate data
nodes = data.library[0].model.nodes;
nodesLen = nodes.length;
//Load nodes and add them to scene and array
for (var i = 0; i < nodesLen; i++) {
var url = nodes[i].url;
// PLY loader
var loader = new THREE.PLYLoader();
loader.load(url, function(geometry) {
geometry.computeFaceNormals();
var material = new THREE.MeshPhongMaterial({ color: 0xffffff, vertexColors: THREE.VertexColors, transparent: true, side: THREE.DoubleSide });
var mesh = new THREE.Mesh(geometry, material);
mesh.stepNum = i;
console.log(i);
mesh.position.x = 0;
mesh.position.y = 0;
mesh.position.z = 0;
//Add to scene
scene.add(mesh);
//Push into array
nodesArr.push(mesh);
});
}
});
}
问题:它们加载不正确。当我在PLY加载器中检查“console.log(i)”的输出时,它总是返回相同的值。我认为,在加载模型时,另一个循环已经开始。如何指示循环等到所有函数在另一个循环开始之前完成?
这可能帮助你:HTTP:// stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example - 它不是那么明显,但JavaScript引擎做的事情略有不同,比你想象的。 –