Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 2 di 12
  • livello principiante
Indice lezioni

loadVariablesNum

La funzione globale per il caricamento dati su livello
La funzione globale per il caricamento dati su livello
Link copiato negli appunti

La sintassi dell'azione (o meglio della funzione globale) loadVariablesNum() è la seguente:

loadVariablesNum( file, livello [,metodo] );

dove file è il nome del file, completo di percorso, da caricare, e livello è il livello di impilamento in cui caricarlo. Il terzo parametro, che da adesso in poi non considereremo, serve nel caso dell'invio di variabili, e ne indica il metodo HTTP, "GET" o "POST". Nel caso del solo caricamento è superfluo, quindi useremo semplicemente:

loadVariablesNum ( file, livello );

Ad esempio:

loadVariablesNum("cartella/file.txt", 0);

Quello 0 utilizzato come secondo parametro della funzione, indica che le variabili verranno caricate nella timeline principale del filmato principale. Per capire meglio, facciamo una piccola digressione.

.i livelli

Due o più filmati swf possono essere caricati gli uni sopra gli altri per vederne il contenuto in trasparenza, come avviene sovrapponendo dei fogli di acetato:

File di testo

Questa sovrapposizione si chiama "impilamento", dato che viene costruita una "pila" di filmati. La pila inizia dal basso con un filmato detto "principale", e continua con una serie di filmati detti "secondari". Per distinguere i vari filmati nella pila si usa indicarne il livello, partendo da quello del filmato "principale": il livello 0.

Come si fa a caricare un filmato in un livello superiore a quello principale? Con l'azione (funzione globale) loadMovieNum:

loadMovieNum("filmati/movie.swf", 1);

La cifra 1 utilizzata come secondo parametro, indica che il filmato "movie.swf", contenuto nella cartella "filmati", andrà posizionato nel primo livello di impilamento sopra il filmato principale. Scrivendo:

loadMovieNum("filmati/movie.swf",6);

il filmato viene caricato nel sesto livello di impilamento, lasciando vuoti i primi 5.

Quando vogliamo richiamare un filmato in un livello di impilamento tramite Actionscript, usiamo la sintassi _leveln dove a n dobbiamo sostituire il numero del livello. Ad esempio, per avviare il filmato nel livello 5, scriveremo:

_level5.play();

Tornando al loadVariablesNum: come dicevamo, la scrittura

loadVariablesNum("cartella/file.txt", 0);

indica che le variabili contenute nel file di testo verranno caricate nel livello 0. Ora, supponiamo di avere un filmato con dei campi di testo nella timeline principale, e di caricare un file di testo con la sintassi appena vista, e che tutto funzioni regolarmente.

Se carichiamo questo filmato su un livello di impilamento superiore allo 0, come quando lo carichiamo nel livello 1 sopra un filmato principale, la cosa non funziona più.

Questo perchè il loadVariablesNum carica le variabili nella timeline principale del filmato nel livello 0, mentre i campi di testo adesso sono nel livello 1.

Quindi, perchè la cosa riprenda a funzionare, dobbiamo modificare il comando perchè rispecchi la nuova posizione del filmato:

loadVariablesNum("cartella/file.txt", livelloDelFilmato);

nel caso dell'esempio:

loadVariablesNum("cartella/file.txt", 1);

Facciamo subito una prova. Creiamo un filmato (con Flash5 o MX, è indifferente), e sullo stage creiamo tre campi di testo, impostati con le variabili "nome", "cognome" e "prova".

In Flash 5

Pannello Text Options - Flash 5

Pannello Text Options - Flash 5

In Flash MX

Pannello Properties - Flash MX

Pannello Properties - Flash MX

Nello stesso frame in cui sono presenti i tre campi di testo, inseriamo lo script:

loadVariablesNum("file.txt", 0);
prova = "nome: " + nome;

Infine, creiamo un file chiamato "file.txt" contenente il seguente testo:

nome=Mario&cognome=Rossi

Esportiamo, e questo è quello che otteniamo:

Scarica l'esempio

Scarica l'esempio

Molto probabilmente, vedremo i primi due campi di testo con inserite correttamente le due variabili importate dal file esterno, ma nel terzo campo vedremo solo la scritta "nome: ".

Questo perchè, come appena spiegato, non si può caricare un file di testo e supporre che le variabili siano subito cariche per essere utilizzate via script, mentre i campi di testo ce ne mostrano il contenuto appena questo diventa disponibile.

Per risolvere questo problema, facciamo le seguenti modifiche:

  • cambiamo il file di testo aggiungendo una variabile "finta" alla fine

    nome=Mario&cognome=Rossi&loaded=ok

  • creiamo un filmato di 4 frame
  • nel primo frame del filmato, scriviamo solo l'istruzione per il caricamento:

    loadVariablesNum("file.txt", 0);

    • nel secondo frame, lo script per controllare che l'ultima variabile del file di testo sia stata caricata:

    if(loaded == "ok"){
        this.gotoAndStop(4);
       }

    • nel terzo frame, lo script per rimandare al frame precedente per un nuovo controllo

    this.gotoAndPlay(2);

    • nel quarto frame, inseriamo i tre campi di testo con lo script che utilizza una delle variabili:

    prova = "nome: " + nome;

    Scarica l'esempio

    Scarica l'esempio

    E questa volta ha funzionato. Cosa succede esattamente? Nel primo frame avviene il caricamento del file di testo: nel secondo, verifichiamo se è stata caricata l'ultima variabile. Se la variabile non è stata caricata, l'istruzione tra le graffe dell'if non viene eseguita, e la riproduzione continua al terzo frame, che rimanda la testina sul secondo frame. Abbiamo quindi un ciclo di controllo continuo tra il secondo e il terzo frame, fino a che la condizione non è verificata.

    A questo punto, la riproduzione viene spostata e fermata al frame 4, dove vediamo le variabili nei campi di testo, e dove la variabile "nome" può correttamente essere utilizzata via script.

    .flashMX

    Con il FlashMX non è necessario questo tipo di loop, in quanto è possibile utilizzare l'evento onData che viene scatenato al termine del caricamento. La sintassi in questo caso sarà:

    _leveln.onData = function () {
    // azioni da eseguire a caricamento completo

    }
    loadVariablesNum(nomefile, n);

    e quindi, ad esempio:

    _level0.onData = function ()
    {
        prova = "nome: " + nome;
    }
    loadVariablesNum ("file.txt", 0);

    Scarica l'esempio

    Annotazioni importanti:

    • i campi di testo non sono delle variabili, e non contengono alcun valore: solo solo delle "finestre" attraverso le quali possiamo vedere il contenuto di una variabile alla quale il campo di testo è associato.
    • il loadVariablesNum() funziona allo stesso modo in Flash 5 e Flash MX, ma per quest'ultimo è decisamente obsoleto, rimpiazzato e migliorato dal metodo Load dell'oggetto LoadVars.

Ti consigliamo anche