Ho una situazione simile in un gioco costruito con Three.js e Google Closure. Devo caricare 2 risorse, Tre e Chiusura non mi permettono di renderle sincrone.
Inizialmente ho ingenuamente scritto quanto segue:
main() {
...
var loaded=0;
...
// Load Three geometry
var loader = new THREE.JSONLoader();
loader.load("x/data.three.json", function(geometry) {
...
loaded++;
});
// Load my engine data
goog.net.XhrIo.send("x/data.engine.json", function(e) {
var obj = e.target.getResponseJson();
...
loaded++;
});
// Wait for callbacks to complete
while(loaded<2) {}
// Initiate an animation loop
...
};
Il ciclo che attende i callback per completare non finisce mai, dal punto di vista del ciclo loaded
non vengono mai incrementato. Il problema è che i callback non vengono attivati fino al main
resi (almeno su Chrome comunque).
Una soluzione potrebbe essere quella di avere entrambi i callback che controllano per vedere se è l'ultimo a completarsi, e loro proseguono per avviare il ciclo dell'animazione.
Un'altra soluzione - forse una risposta più diretta a ciò che si sta chiedendo (come ad aspettare per ogni carico prima di avviare un altro) - sarebbe quello di nido i callback come segue:
// Load Three geometry
var loader = new THREE.JSONLoader();
loader.load("x/data.three.json", function(geometry) {
...
// Load my engine data
goog.net.XhrIo.send("x/data.engine.json", function(e) {
var obj = e.target.getResponseJson();
...
// Initiate an animation loop
...
});
});
};
fonte
2011-12-30 14:58:16
Mi piacerebbe che la gente avrebbe lasciato commenti esplicativi quando -1. – kojiro