|
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...
|