Un aspetto che si può sfruttare in molte situazioni è il tempo. In un gioco possiamo dare un limite di tempo al giocatore, in un'applicazione potremmo voler far passare del tempo tra una schermata e un'altra; come fare per "gestire" il tempo all'interno di Flash Lite? Semplice, usando il comando getTimer().
Questo comando restituisce il numero di millisecondi trascorsi dall'inizio del filmato. La sintassi è molto semplice:
Listato 1. Esempio di chiamata a getTimer() con assegnazione
a = getTimer();
Questo codice associa alla variabile "a" il numero di millisecondi trascorsi dall'inizio del filmato.
Il valore da solo però serve a poco: vediamo come utilizzare getTimer per migliorare la nostra applicazione. Quali caratteristiche legate al tempo potremmo inserire? L'utente può navigare tra le foto con il joystick direzionale; potremmo dargli la possibilità di usare uno slideshow automatico delle foto.
Ovviamente dovrebbe esserci un intervallo di tempo tra una foto e l'altra…ed ecco che entra in gioco il comando getTimer().
Introduzione teorica
Pensiamo a quali siano i requisiti che la nostra nuova implementazione dovrebbe soddisfare:
- L'utente dovrà poter attivare e disattivare lo scorrimento automatico delle foto;
- quando attivata un timer dovrà gestire l'avvicendarsi delle foto ogni determinato lasso di tempo.
Possiamo immaginare che quando l'utente attiva lo scorrimento automatico dobbiamo rilevare il tempo attuale (che farà da "zero"); quando sarà passato l'intervallo di tempo prestabilito dall'istante iniziale il sistema può passare alla foto successiva ed impostare un nuovo istante iniziale.
L'operazione di rilevamento del tempo e quella di controllo sull'attivazione dello scorrimento automatico devono essere ripetute di continuo, poiché se fossero effettuata una sola volta non otterremmo il risultavo voluto. Come fare ad eseguire un'azione in maniera continua? In Flash 5 si usa il codice:
Listato 2. Gestire lo scorrere dei fotogrammi con Flash
onClipEvent(enterFrame){
// azioni
}
Questa sintassi però non è supportata in Flash Lite, ci troviamo quindi a dover fronteggiare nuovamente un attuale limite di questo player.
Ripetere un'azione
Prendiamo in considerazione una linea temporale. Essa è composta da più fotogrammi, che vengono eseguiti uno dopo l'altro. Quando la timeline arriva al suo ultimo fotogramma l'animazione riparte dal primo. Ecco la caratteristiche che possiamo sfruttare!
Creiamo un clip filmato con una linea temporale di due fotogrammi e sul primo inseriamo il codice che vogliamo eseguire in maniera continua. In questo modo la timeline eseguirà il codice sul primo fotogramma, si sposterà al secondo fotogramma, quindi tornerà sul primo, eseguendo nuovamente il codice.
Passiamo alla pratica
Come accennato, creiamo un nuovo movieclip con due fotogrammi. Sul primo fotogramma inseriamo questo codice:
Listato 3. Temporizzare un'azione
if(_root.slideshow){
a = getTimer();
if(a - _root.old_time > 1000){
tellTarget("_root"){
call("nextFoto");
}
_root.old_time = getTimer();
}
}
Lasciamo vuoto il secondo fotogramma.
Per capire meglio il codice, analizziamo prima la parte che dobbiamo aggiungere al nostro pulsante fittizio, che è la seguente
Listato 4. Introdurre una variabile di controllo sul "pulsante fittizio"
// alla pressione del tasto 7
on(keyPress "7"){
// se _root.slideshow non ha valore true
if(!_root.slideshow){
// imposta _root.slideshow a true
_root.slideshow = true;
// imposta _root.old_time al valore di getTimer()
_root.old_time = getTimer();
// altrimenti (se _root.slideshow ha valore true)
} else {
// imposta _root.slideshow a false
_root.slideshow = false;
}
}
In pratica la prima parte del codice si occupa di attivare lo slideshow (imposta _root.slideshow a true, che è la condizione necessaria per avviare il codice del movieclip) oppure disattivarlo (imposta a false _root.slideshow, quindi fa sì che le azioni del movieclip non vengano più eseguite).
Possiamo ora analizzare più a fondo il codice contenuto nel movieclip:
Listato 5. Temporizzazione + slideshow
// Controlla se il valore di _root.slideshow è true:
// in questo caso vengono eseguite le
// azioni successive, altrimenti no
if(_root.slideshow){
// Associa alla variabile a il valore
// di getTimer (quindi i millisecondi
// trascorsi dall'inizio del filmato)
a = getTimer();
// Controlla se è passato più di un
// secondo (1000 millisecondi) da
// quando abbiamo attivato lo slideshow
// (infatti _root.old_time viene impostata
// come punto "zero" quando attiviamo
// lo slideshow).
if(a - _root.old_time > 1000){
// Richiama il fotogramma "nextFoto"
// della _root
tellTarget("_root"){
call("nextFoto");
}
//Imposta il nuovo punto "zero"
_root.old_time = getTimer();
Possiamo ora testare la nostra applicazione nell'emulatore: se premiamo il tasto "7" noteremo come lo scorrimento automatico avrà inizio. Premendo nuovamente lo stesso tasto, lo scorrimento automatico cesserà.
Abbiamo visto come ripetere un'azione in maniera continua e come richiamare una funzione da una linea temporale diversa rispetto a quella in cui si trova, inoltre ora sappiamo come gestire degli intervalli di tempo durante l'esecuzione del filmato.
È possibile scaricare l'esempio sviluppato fin'ora.