Spesso può capitare di creare effetti dinamici che necessitano dell'inserimento di più istanze di una clip; questo renderebbe il filmato troppo complicato da gestire. Per evitare ciò è stata introdotta in Flash, l'azione
duplicateMovieclip che, ogni qualvolta viene utilizzata, crea un duplicato della clip specificata come Target. Ecco un esempio molto semplice:
Al rilascio del bottone Duplica viene eseguita l'azione duplicateMovieClip che genera un duplicato della clip logo ad ogni rilascio del pulsante del mouse.
La sintassi per l'azione è:
duplicateMovieClip(nomeTarget newName, depth);
In nomeTarget bisogna specificare il nome del movieclip da duplicare, in newName il nuovo nome da assegnare e in depth il livello di sovrapposizione del duplicato.
Il nuovo duplicato del movieclip inizia la riproduzione dal frame numero 1 indifferentemente dal movieclip originale. Quindi, le animazioni sono distinte e indipendenti. In più, l'eliminazione del movieclip originale provoca automaticamente, l'eliminazione di tutti i movieclip duplicati.
E fin qui tutto semplice. I problemi nascono quando si deve utilizzare questa
azione più di una volta. Siccome per ogni duplicato è necessario specificare
un nuovo nome, come fare per evitare di scrivere tot volte la stessa
azione (mettiamo che il movieclip debba essere duplicato 20 volte, è
lunga scrivere l'azione per 20 volte... non trovate?)?
Bisogna utilizzare un piccolo stratagemma che si avvicina moltissimo ad un
oggetto usato nella programmazione in generale: l'array. L'array viene spiegato nella sezione professionale di questo corso. In questa lezione,
mi limiterò a mostrarvi una simulazione di array.
Senza scendere in spiegazioni lunghe, vi faccio subito un esempio.
Poniamo il caso che la duplicazione di un movieclip
sia resa possibile da un bottone proprio come nel filmato che ho creato
io. In quel caso, il numero dei duplicati sarebbe variabile, perché
dipenderebbe dall'utente che preme il pulsante. L'unico modo è quello
di creare i nomi dei nuovi duplicati dinamicamente ad ogni clic sul bottone. Per fare questo, ci serviamo di una variabile, che chiameremo semplicemente x.
Nel primo frame, poniamo x=1 ed assegniamo l'azione stop.
Come azione del bottone inseriamo:
on
(release) {
 x++;
 duplicateMovieClip("logo",
"logo"+x, x);
}
Al clic sul bottone la variabile x viene incrementata di 1, poi il movieclip logo viene duplicato. Il nome del movieclip viene creato dinamicamente in questo modo:
"logo"+x
Questo permette di avere un nome differente adogni clic sul bottone.
Infatti, la prima volta che viene cliccato il bottone, x diventa 2, e il nome del nuovo duplicato diventa logo2.
La seconda volta, x diventa 3, e il nome del duplicato logo3 e così via...
In questo modo, il movieclip verrà duplicato tante volte quante "cliccate" effettua l'utente sul bottone Duplica senza avere limitazioni nel numero e senza scrivere tante azioni. Con lo stesso metodo viene valorizzato anche il parametro depth,
infatti viene reso uguale a x (che ad ogni clic ha un valore diverso).
Una volta che i duplicati non servono più, è possibile eliminarli tramite l'azione removeMovieClip. In questa azione è necessario specificare il nome del duplicato da eliminare.
Ecco cosa intendo quando parlo di "generare valori dinamicamente". È possibile quindi gestire, con poche righe di codice, situazioni molto complesse che impegnerebbero molto tempo nella scrittura del codice.