Il metodo Watch
Tutti gli oggetti in Flash hanno delle proprietà (noteanche come variabili) i cui valori nel corsodell’animazione possono cambiare.
FlashMX mette a dispozione una nuova funzionalità chepermette di ‘monitorare’ una variabile per tuttoil corso dell’animazione e richiamare una funzioneogniqualvolta il suo valore viene modificato: stiamo parlandodel metodo Watch.
Il controllo del valore di una variabile può essereanche fatto attraverso l’evento enterFrame di unmovieClip ma questo può essere pesante sul lavoro delcomputer.
Watch permette di attivare una funzione solo quando ilvalore della variabile controllata viene modificato.
La sintassi è la seguente:
nomeOggetto.watch(“nomeVariabile/Proprietà”,nomeFunzione)
La funzione deve accettare tre parametri: id, oldVal e newVal che vengono inviatiautomaticamente alla funzione quando viene richiamata dalmetodo watch.
Id è il nome della variabile controllata, oldValè il valore precedente la modifica e newVal èil nuovo valore.
Due cose importanti da ricordare.
La funzione che viene richiamata da watch deve esseredefinita o prima del metodo stesso, oppure all’internocome parametro.
Se non si desidera più controllare una variabile siutilizzi il metodo unwatch con la seguente sintassi:nomeOggetto.unwatch(nomeVariabile/Proprietà).
Non è possibile inoltre controllare proprietàpredefinite quali (_x,_y ecc.).
Ecco un esempio.
In questo progetto, controlleremo il valore della variabileclr, e ogni voltache verrà modificato il suo valore, verràrichiamata dal metodo watch una funzione che creeràun’istanza di clip (che fungerà da sfondo)diversa in base al nuovo valore della variabilecontrollata
Innanzitutto si creino tre simboli di clip filmato nellalibreria con i seguenti identificatori: back1, back2, back3 (che vanno inseriti nellafinestra Linkage Properties) e si selezionino le opzioniExport for ActionScript ed Export in first frame.
Useremo gli identificatori all’interno del blocco dicodice.
Si crei anche un movieClip vuoto che servirà perallegare le istanze dei clip in precedenza creati.
Ora si crei un semplice pulsante a cui collegheremo unevento release del mouse.
Il rilascio del pulsante provoca la modifica del valoredella variabile clr.
Useremo anche un flag (che con molta fantasia chiameremoflag), che sarà fondamentale per la variazione diclr.
Nel primo fotogramma chiave del filamto le prime due righesono queste:
clr = 0;flag = 0;
Quindi andiamo a definire cosa deve succedere quandorilasciamo il pulsante.
change_btn.onRelease = function () {if (flag + 1 > 3) {flag = 1;clr = flag;} else if (!(flag + 1 > 3)) {++flag;clr = flag;}}; Esaminiamo il codice.
Flash incontra lo script quando il pulsante del mouse vienerilasciato.
Spiegheremo dopo il perché del flag.
All’interno dell’evento abbiamo un cicloif..else if, dove nella prima espressione di confronto siverifica se è possibile caricare lo sfondo(l’istanza di clip) successivo.
Se è caricato il terzo sfondo e visto che gli sfondisono tre, non sarà possibile creare una quarta istanzae quindi flag verrà resettato ad 1.
Anziché usare un valore esplicito (3) si puòusare meglio una variabile.
Quindi il valore di flag viene assegnato alla variabileoggetto del controllo, clr.
La seconda espressione viene ricavata se la prima risultafalsa, ed esegue un controllo inverso.
Ad ogni istruzione if seguono due righe di codice in cuisono state inserire delle espressioni di assegnazione.
Nella prima espressione (flag + 1 > 3) flag vieneresettato ad 1 perché lo sfondo corrente èl’ultimo e quindi più avanti non si puòandare.
Nella seconda esperessione (!(flag + 1 > 3)) invece flagviene incrementato di 1 unità.
In entrambe le espressioni compare la riga clr = flag chemodifica il valore della variabile da controllare e diconseguenza watch richiama immediatamente la funzioneassociata.
Perché l’uso di flag? Semplicementeperché watch imposta la variabile controllata clr alvalore undefined equindi non sarebbe possibile ricavare le espressionicondizionali con questo valore.
Allora si è usata una variabile intermedia su cuilavorare e poi usare per modificare clr.
A questo punto definiamo il metodo watch.
this.watch ('clr', function (id, oldVal, newVal) {trace (oldVal);trace (newVal);empty_mc.attachMovie ("back" + newVal, "myBack" , 1);}); Abbiamo usato this perché la variabile da controllaresi trova nella stessa posizione di watch.
Di solito conviene inserire wacth dove risiede lavariabile.
Il primo parametro del metodo richiede il nome, comestringa, della variabile da controllate mentre il secondo ladefinizione della funzione che può essere definitaall’interno come parametro oppure al di fuori eindicato solo il nome.
Si è preferito usare il primo metodo.
La funzione riceve da watch tre parametri che vengonomemorizzati rispettivamente in id (nome variabile), oldVal(vecchio valore) e newVal (nuovo valore – il valore diflag assegnato a clr).
Le due azioni trace visualizzano i valori vecchio e nuovo eda qui si può capire perché si è usatoil flag.
Infine l’ultima riga allega nell’istanza di clipvuoto un’istanza di uno dei tre simboli di clip nellalibreria in base al nuovo valore di clr.
Il codice completo:
clr = 0;flag = 0;//change_btn.onRelease = function () {if (flag + 1 > 3) {flag = 1;clr = flag;} else if (!(flag + 1 > 3)) {++flag;clr = flag;}};//this.watch ('clr', function (id, oldVal, newVal) {trace (oldVal);trace (newVal);empty_mc.attachMovie ("back" + newVal, "myBack" , 1);}); E possibile controllare anche una variabile associata ad uncampo di testo di input per esempio, e richiamare unafunzione ogni volta che si cambia il valore nel campo.
Questo è un modo per utilizzare watch, qualora netrovaste degli altri sarei bel lieto di condividerli.
