ok, tenendo presente il codice postato ieri sera, organizziamo il nostro filmato...
2 scene, una è quella del preload e deve essere la prima in ordine di apparizione
nella prima scena inserisco il mio codice e, se voglio, un movieclip (barra) che rappresenta una barra ed un campo di testo (testo) che mi visualizzi l'avanzamento
inserisco uno stop() in testa al codice per bloccare l'esecuzione del filmato fino a che questo non viene completamente caricato
poi inserisco la funzione di preload
Codice PHP:
// inizializzo una funzione prototipo da assegnare ad un clip vuoto che farà da "generatore" per il preload
// la funzione ha tre parametri
// target: è il clip (nel nostro caso è la _root) di cui fare il preload
// progress: è una funzione che inizializzeremo dopo, che viene invocata ogni volta che c'è un progresso nel preload
// vien da se che questa funzione raccolga le azioni da fare per far "vedere" il preload grafico
// execute: è la funzione che raccoglie le azioni da effettuare a fine preload
MovieClip.prototype.preload = function(target:MovieClip, progress:Function, execute:Function):Void {
// al clip "generatore" attivo la funzione onEnterFrame che viene eseguita nel tempo, in maniera costante
this.onEnterFrame = function() {
// inizializzo una variabile che mi "porti" il valore attuale ad ogni ciclo, dei dati già caricati
var bl:Number = target.getBytesLoaded();
// inizializzo una variabile che mi "porti" il valore dei dati totali da caricare
var bt:Number = target.getBytesTotal();
// inizializzo la percentuale che ottengo dividendo i dati caricati per quelli totali e moltiplicando il valore
// decimale ottenuto, per 100
var pe:Number = Math.floor((bl/bt)*100);
// verifico se la percentuale ha assunto un valore e in tal caso richiamo la funzione di progresso
if (!isNaN(pe)) {
progress(target, pe);
}
// quando le condizioni sono soddisfatte e quindi il caricamento è giunto al termine
if (bl>=bt && bt>pe && pe == 100) {
// blocco l'enterFrame per evitare di farlo ciclare inutilmente a carico della CPU
this.onEnterFrame = undefined;
// richiamo la funzione di fine preload, che si occupa delle azioni successive al caricamento
execute(target);
}
};
};
a questo punto, leggendo i commenti dovrebbe essere facile comprendere come andare avanti...
in pratica ora devo inizializzare le due funzioni, quella di progresso e quella finale
Codice PHP:
// posso dare qualsiasi nome a questa funzione, i parametri invece sarebbero quei due fissi,
// salvo di modificare lo script in alto, ma per il momento non ci serve
var onProgress:Function = function (target:MovieClip, percentual:Number):Void {
// secondo quanto detto, abbiamo su _root una barra di progresso ed un campo di testo
// perciò gli assegneremo le azioni per visualizzare il progresso
barra._xscale = percentual;
testo.text = "Caricamento..."+percentual+"%";
};
// anche qui non ha importanza il nome della funzione
// in questo caso è molto semplice anche l'azione da effettuare
// si manda solo il filmato alla nuova scena, nulla di più
var onComplete:Function = function (target:MovieClip):Void {
nextScene();
};
a questo punto si richiama effettivamente il preload, ma per farlo abbiamo bisogno del movieclip "generatore" che possiamo creare al volo, con AS
var m:MovieClip = this.createEmptyMovieClip("m", 1);
e la chiamata al preload avviene quindi sul clip "m"
m.preload(_root, onProgress, onComplete);
importante assegnare correttamente i parametri qui (i nomi utilizzati per le funzioni e il target che nel nostro caso è _root)
non ci sarebbe altro, lo script è modificabile per varie esigenze, comunque questa è la base, se rispetti le istruzioni come descritte, vedrai che il preload funzionerà, l'ho testato e funziona perfettamente