In Three.js, se ho più chiamate al JSONLoader per caricare più oggetti simili a questo (esempio semplificato):Three.js JSONLoader callback
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);
}
}
Come è possibile determinare che ingranano è stato restituito durante la richiamata , specialmente quando arrivano frequentemente fuori servizio?
Sto provando a gestire più mesh restituite con una singola funzione di callback generica. C'è qualche proprietà nella geometria restituita che indica il nome file originale su cui posso testare?
O forse c'è un modo più elegante? Forse la creazione di un nuovo oggetto THREE.JSONLoader per ogni chiamata potrebbe aiutare la funzione di callback a determinare quale maglia è arrivata?
Apprezzo qualsiasi aiuto/idee! Grazie!
fantastico ... Sono stato in grado di farlo funzionare. Non avrei mai pensato di restituire una funzione all'interno di una funzione. Sono davvero curioso di sapere cosa sta succedendo qui ... Puoi spiegare un po 'come/perché questo funziona o indicarmi la direzione di qualche documentazione? – Dev
@Dev Questo è ciò che viene chiamato un [chiusura] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures). Quando 'meshloader (" mesh1.js ")' viene passato come argomento, viene eseguito direttamente (a causa della presenza di parentesi). Quando viene eseguito, restituisce un'altra funzione. Quindi è esattamente come se avessi passato la funzione anonima 'function (geometry) {...}' come argomento, eccetto che questa funzione anonima sarà eseguita come un callback in un contesto in cui la variabile 'fileName' è definita e ha il valore '" mesh1.js "'. – Pioul