Nelle nostre applicazioni in Flash, a volte è necessario duplicare degli oggetti presenti sullo stage, con altre dimensioni, posizioni, colori e via dicendo….
La classe duplicateMovieClip ci viene in aiuto, infatti permette di duplicare un oggetto, vediamo la sintassi:
duplicateMovieClip(target, "nuovonome", profondità);
- target= nome istanza dell’oggetto da duplicare
- nuovonome= nuova istanza per l’oggetto duplicato
- profondità= Serve per impostare la profondità dell’oggetto, se o meno deve essere in primo piano.
Inserendo this.getNextHighestDepth() il nostro oggetto sarà nel livello più alto e visibile sopra tutti.
Il metodo removeMovieClip() invece elimina un’istanza di clip filmato creata con duplicateMovieClip().
removeMovieClip(target);
Avendo letto le basi della classe duplicateMovieClip andiamo a vedere come è semplice duplicare lo stesso oggetto in posizioni diverse come nell’esempio.
Sullo stage abbiamo un oggetto clip filmato di nome istanza money
Impostiamo una variabile nel primo frame
x = "1";
Creaimo un pulsante ed entriamo nel codice [tasto rapido F9]
on (release) {
set (x++, ""); // incremento la variabile x
duplicateMovieClip ("money", "money"+x, x); // duplico il mio clip con la variabile x incrementata
setProperty ("money"+x, _x, (25*x)); // sposto gli oggetti duplicati sull'asse x
}
16 Commenti
Ciao julius, grazie per questo ottimo tutorial. Ho una domanda: come si fa a stabilire anche le coordinate dei vari movie duplicati?
ciao Vincent,
come vedi nell’esempio, gli oggetti duplicati vengono spostati sull’asse x tramite la funzione setProperty
sintassi
setProperty ("target", property, expression);
Nel esempio puoi notare come il target, ovvero gli oggetti duplicati, vengano identificati con money + l’incremento della x, quindi money1, money2, money3…
poi la proprietà su cui vogliamo intervenire sarà l’asse x, quindi _x
Invece come espressione moltiplichiamo il valore della x per 25, quindi 25×1, 25×2, 25×3…con il risultato di spostare gli oggetti duplicati sulle ascisse…
setProperty ("money"+x, _x, (25*x));
Ora puoi riutillizare la funzione setProperty anche per l’asse delle ordinate qualora tu voglia spostare i tuoi oggetti duplicati in altre cordinate…
ciao ho letto con interesse il tuo tutorial e ho provato ad applicarlo ad una cosa che sto facendo, visto che prerò ancora non sono molto esperto mi si presenta un problema che non so risolvere.
dunque, io ho 5 pulsanti che richiamano ogniuno un mc diverso, ad ogni pulsante ho inserito questa sintassi per duplicare gli oggetti in una posizione definita
on (release) {
set (x++, “”);
duplicateMovieClip (“nomeistanzamc”, “nomeistanzamc”+x, x);
setProperty(“nomeistanzamc” + x, _x, (500));
setProperty(“nomeistanzamc” + x, _y, (300));
}
il problema è che, essendo gli oggetti che compaiono trascinabili tramite startDrag e stopDrag, mi piacerebbe che sparissero se trascinati al difuori dello stage…ma non so come fare.
Ho cercato in lungo e in largo una solozione , ma niente…
tu sai come fare?
ciao
Ciao marco,
non ho capito bene :)
Duplichi i clip, che sono draggabili, e quando li trascini fuori dallo stage vorresti che spariscano?
si si…proprio così.
è una sorta di gioco, cliccando sui bottoni si duplicano i clip che sono draggabili…però devo avere la possibilità di eliminarli a piacimento dallo stage…e mi piacerebbe fosse possibile tramite il trascinamento fuori dallo stage.
è possibile farlo?
ciao e grazie
Ciao marco,
per rimuovere i clip duplicati devi usare
removeMovieClip(target);
potresti ricorrere a questo trucchetto, ovvero crei dei clip che userai come limiti al di fuori dello stage, se questi verrano toccati dai tuoi clip duplicati lo rimuoverai.
il codice:
//Codice per trascinare un oggetto
on (press, dragOver) {
this.startDrag();
}
on (release, rollOut) {
this.stopDrag();
}
//fine trascinamento
// verifico se il clip duplicato tocca i miei 4 clip a-b-c-d
onClipEvent (enterFrame) {
if (this.hitTest(_root.a) || this.hitTest(_root.b) || this.hitTest(_root.c) || this.hitTest(_root.d)) {
trace("sei fuori");
removeMovieClip(this);
} else {
trace("sei desntro");
}
}
:) Scarica Esempio
grazie julius…gentilissimo!
ho provato e funge.
solo un paio di cose per capire meglio:
la sintassi
trace(“sei fuori”);
} else {
trace(“sei dentro”);
a che serve? è necessaria?
lo chiedo perchè provando il clip dal falsh..con prova filamto… mi si apre una finestra bianca(quella dell’errore di sintassi) con scritto “sei dentro” che si ripete all’infinito in colonna…poi però salvando in flv tutto fila liscio.
ho provato a togliere
trace(“sei fuori”);
} else {
trace(“sei dentro”);
e funziona comunque, ma senza messaggi di errore, anche con…prova filmato…quindi è necessario mettere queste righe?
ho scaricato il tuo esempio, ma all’apertura di flash mi dice “formato file inatteso”..forse perchè uso una versione diversa? io ho flash 6 mx.
comunque , questo a parte…
grazie mille.
caio
Lo pubblicato con la versione MX prova ora…
Comunque il trace lo inserito solo per fare delle prove, puoi liberamente toglierlo….mi sono dimenticato ^^
Di solito si usa il trace per avere un riscontro di quello che si sta facendo nella finestra di output :)
ciao julius vedevo il tuo tutorial sul duplicateMovieClip, ma mi chiedevo si può duplicare un movieClip nidificato??? ossia io ho un mc e dentro questo mc ho altri mc che on release dovrei duplicare. ti risulta possibile fare una cosa del genere???
@Matteo ciao allora per risolvere basta che inserisci lo script in questo modo
Riferendoci al tutorial
ho un clip di nome istanza <strong>mc</strong> in cui duplico al suo interno un clip di nome istanza <strong>money</strong>
_root.mc.duplicateMovieClip("money"+x, x, {_x:25*x});
saluti
Julius tuto ok sembra che abbia risolto, ma il codice credo che era al contrario forse per mio errore… ho risolto in questo modo lo lascio qua:
_root.v.duplicateMovieClip("mc"+x,x,{_x:25*x});
dove v è il moviclip in questione che devo duplicare e mc è il moviclip che lo contiene, cmq grazie davvero!
Sei un grande
@Matteo figurati ciao
ciao Julius coplimenti per il tuo tutorial io sono nei primissimi passi e ho un picolo problema voglio associare uno script al movie clip per duplicarlo quando si clicca su di esso (al rilascio del pulsante del mause) come facio?
Grazie
e se io con duplicatemovieclip creo una serie di pulsanti e voglia assegnare a ciascuno un’azione diversa? Io riesco sono ad assegnare la stessa a tutti…
tipo: pulsante1->carica filmato1, pulsante2->carica filmato2…
Grazie
Cat
Come poso duplicare il mc2 che si trova al interno di mc1
Ciao Julius, intanto complimenti perchè sei un punto di riferimento cruciale per tutti i flasher.
Una domanda ma se voglio duplicare un movieclip in modo che i clip siano a distanza variabile l’uno dall’altro?
Grazie!!!