我試圖做的是:負荷大量的模型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引擎做的事情略有不同,比你想象的。 –