duplicateMovieClip – Duplicare oggetti

- Letture: 2.696

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
}

Scarica il sorgente
Guarda il Tutorial

Stratega, Docente, Speaker con più di 12 anni di esperienza in strategie creative multicanale. Oggi sono Managing Partner di ThinkingHat, Innovation Studio specializzato in tecnologie emergenti per aziende e brand audaci.

16 Commenti

  1. Ciao julius, grazie per questo ottimo tutorial. Ho una domanda: come si fa a stabilire anche le coordinate dei vari movie duplicati?

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

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

  4. Ciao marco,

    non ho capito bene :)

    Duplichi i clip, che sono draggabili, e quando li trascini fuori dallo stage vorresti che spariscano?

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

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

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

  8. 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 :)

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

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

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

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

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

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

Commenti