Flash: eliminare un componente

Di: alice33 | 26/09/2020 18:42:18
Esiste un modo per eliminare un componente con removeMovieClip() direttamente attraverso il componente stesso?
Ho usato un componente trovato in rete di nome DlgColor, che permette all'utente di colorare dei clip composti da varie parti, scegliendoli da una palette. Il problema è che quando si chiude il componente attraverso il suo bottone di chiusura incorporato, in realtà lo si rende invisibile e non viene rimosso, con il risultato che l'ultimo colore usato resta attivo e colora ancora tutto quello che viene cliccato.
Ho messo un removeMovieClip()sul frame dell'mc che contiene l'istanza del componente, ma non è servito e se provo a modificare il code del componente per sostituire il this._visible=false con il remove mi si blocca tutto. L'unico sistema che ho trovato è quello di "sacrificare" un pulsante "disattiva tavolozza" che viene colorato, ma finalmente riesce a eliminare il componente..... però non mi pare proprio una bella soluzione!
Come posso fare?

Risposte



Ciao alice33,
Dovresti utilizzare unloadMovie(). Funziona.
Per vedere come ho risolto il problema puoi scaricare il file che trovi a questo link:
http://www.danielealessandra.com/dlgcolor.fla
In pratica ho creato un pulsante invisibile che copre il pulsantino X del componente, questo pulsante si chiama "myBtn", l'istanza del componente invece si chiama "myDlg".
A questo pulsante invisibile ho assegnato semplicemente questo:
on (press) {
unloadMovie(myDlg);
unloadMovie(myBtn);
}
In questo modo sparisce il pulsante, sparisce il componente e tutti gli script associati.
Quello che avrai colorato fino a quel momento rimarrà colorato, quello su cui cliccherai successivamente non subirà gli effetti di DlgColor.
Ciao.

Di: Professore | 26/09/2020 18:43:18

GRAZIE 1000!!!

Grazie, Professore!!! Funziona alla perfezione! Era da un bel po' che ci impazzivo su....
Potresti spiegarmi che differenza c'è tra removeMovieClip e UnloadMovie? Credevo che il secondo andasse bene solo per gli mc richiamati con loadMovie, mentre il primo in ogni caso, anche per mc già posizionati sullo stage. Evidentemente non è così.

Di: alice33 | 26/09/2020 18:43:18


Ci sono diverse leggende sulla natura di questi due comandi...
Secondo la guida di Flash:
- removeMovieClip serve a eliminare un'istanza creata con duplicateMovieClip(), con attachMovie() o con createEmptyMovieClip().
- unLoadMovie serve a eliminare il contenuto di un movieclip caricato dinamicamente con loadMovie(), lasciando il contenitore disponibile per altri usi.
In realtà noi sappiamo che entrambi i comandi sono in grado di eliminare istanze create anche in fase di editing dentro Flash.
Per qualche motivo a me ignoto tutte le variabili che sono state settate da pulsanti all'interno di un movieclip vengono misteriosamente “resettate” quando richiamo unloadMovie() per distruggere il movieclip in questione, come se prima di distruggersi il movieclip tornasse al suo primo frame.
In questo caso la variabile _level0.painting ridiventa "false" e quindi non ti trovi più in modalità di riempimento.
La documentazione ufficiale non dice niente al riguardo, io l'ho scoperto per caso e nessuno ne sa molto... Spero di essere smentito e che qualcun altro che magari ne sa più di me possa contribuire a questa discussione.

Di: Professore | 26/09/2020 18:43:18