在three.js所,如果我有多次調用JSONLoader加載這樣的(簡化的示例)的多個對象:three.js所JSONLoader回調
function init() {
var loader = new THREE.JSONLoader();
loader.load("mesh1.js", createScene);
loader.load("mesh2.js", createScene);
}
function createScene(geometry) {
if (geometry.filename == "mesh1.js") {
mesh1 = new THREE.Mesh(geometry, material);
scene.add(mesh1);
} else if (geometry.filename == "mesh2.js") {
mesh2 = new THREE.Mesh(geometry, material);
scene.add(mesh2);
}
}
如何確定齧合已在回調返回特別是當他們經常出現故障時?
我想用一個通用的回調函數來處理多個返回的網格物體。返回的幾何體中是否有一些屬性指示我可以測試的原始文件名?
或者還有更優雅的方式?也許爲每個調用創建一個新的THREE.JSONLoader對象可以幫助回調函數確定哪個網格已經到達?
我欣賞任何幫助/想法!謝謝!
奇妙...我能夠得到這個工作。我永遠不會想到在函數中返回一個函數。我真的好奇這裏到底發生了什麼......你能解釋一下關於如何/爲什麼這會起作用或者指向某些文檔的方向嗎? – Dev 2012-08-18 01:22:35
@Dev這就是所謂的[封閉](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures)。當'meshloader(「mesh1.js」)'作爲參數傳遞時,它會直接執行(由於括號的存在)。執行時,它會返回另一個函數。所以,就好像你傳遞匿名函數'function(geometry){...}'作爲參數,除了這個匿名函數將作爲一個回調被執行,在上下文中變量'fileName'被定義並且具有值'「mesh1.js」'。 – Pioul 2013-03-23 17:12:13