Creare un Text Scroller in Flash 5 (Parte II)
 

 

 

Se avete seguito la prima parte, vi chiederete come mai ci sia anche una seconda parte dell'articolo, visto che il progetto creato funziona correttamente e non sembrava ci dovesse essere un seguito.. Il motivo è subito detto, nella programmazione non esiste mai solo un metodo per risolvere un problema, bensì ne esistono molteplici, ognuno con i suoi pro e contro. Vediamo quindi di analizzare un altro metodo per creare lo stesso Text Scroller. Se non avete letto la prima parte, vi consiglio di farlo subito, la trovate qui.
Quello che faremo è comandare lo spostamento del testo attraverso codice inserito direttamente nell'istanza del clip filmato e non inserendolo nei singoli frames della timeline.

Il risultato finale sarà questo:

Come avrete sicuramente notato in questa seconda versione c'è solo un livello e solamente un frame.
Partendo dal progetto precedente, cancellate il livello Actions e spostate nella timeline i frames del livello Text, in modo che occupi solamente il primo frame (guardate la foto).
Selezionate poi il clip filmato che contiene il testo ed aprite il pannello actions, inserendo il seguente codice Actionscript:

onClipEvent (load) {
// memorizziamo proprieta' testo
pointOfReturn = -(this._width-this._x+168);
oldx = getProperty(this, _x);
newx = oldx;
}
onClipEvent (enterFrame) {
// controlliamo ritorno
if (newx <= pointOfReturn) {
newx=oldx;
}
// settiamo nuova posizione
this._x = newx--;
}

Queste righe dovrebbero esservi familiari, se avete seguito l'articolo precedente.
Avrete sicuramente notato le due maggiori differenze: l'utilizzo dell'handler onClipEvent ed il termine this.
Cominciamo dal primo: per inserire codice in un clip filmato, bisogna indicare in seguito al verificarsi di quale evento verrà eseguita quella parte di codice.
OnClipEvent(load) indica che la parte compresa tra le sue parentesi grafe sarà eseguita solamente una volta all'avvio del filmato(ed è quello che vogliamo, dato che dobbiamo memorizzare le proprietà del clip filmato).
Le linee comprese in onClipEvent (enterFrame) vengono invece eseguite ad ogni frame. Anche qui è quello che ci serve, dato che dobbiamo aggiornare la posizione del testo ad ogni frame.
Passiamo ora a this. Il problema in questo caso è il seguente: come facciamo ad accedere alle proprietà dell'istanza? Se provate ad utilizzare il codice dell'articolo precedente (Testo._x=newx, per esempio), il filmato non funziona correttamente. Si utilizza in questo caso la parola this, che è in sostanza un riferimento all'istanza che si stà programmando,consente tra l'altro di applicare lo stesso codice ad altri oggetti senza dover modificare nulla. Se avete già programmato in c++ sarete già sicuramente abituati all'utilizzo di questo termine.

(Nota: l'istruzione Testo._x=newx; è sbagliata perchè ci troviamo all'interno dell'istanza, se la sostituite con _root.Testo._x = newx; funziona correttamente perchè diciamo di utilizzare come riferimento la timeline principale tramite il comando _root; consultate la documentazione Flash per l'uso di _root e _parent e aspettatevi magari un articolo in proposito in futuro...).

Bene, spero che questa breve spiegazione vi sia stata utile, vedendo applicate due modalità diverse per risolvere lo stesso problema. Vi starete chiedendo quale dei due metodi che abbiamo seguito sia il migliore.... Personalmente preferisco quello di questa seconda parte, perchè mi sembra più elegante e più "object oriented", oltre a mantenere il codice più compatto facilitando l'individuazione di eventuali bug.

Vi dò ora un'idea per estendere il progetto che abbiamo seguito in queste due parti: ora come ora per modificare il testo che scorre dobbiamo caricare Flash, inserire le nuovi frasi e ripubblicare il filmato. Non sarebbe più comodo se il filmato potesse leggere il testo direttamente da un file presente sul server? In questo caso basterebbe modificare questo testo senza modificare il file .swf, rendendo il tutto più facile..
Mi sembra un'idea interessante, cominciate a dare un'occhiata alla guida in linea di Flash per cercare i comandi più appropriati e ricordatevi che non potete compiere operazioni con il testo finchè non l'avete ricevuto dal server...

 

 

 

 

   
 

In caso di problemi/suggerimenti non esitate a contattarmi al solito indirizzo: sakic'at'unlimited2.com

Homepage