Flash: drop target

notte ragazzi, sono mekino, è il mio primo post, studio da poco flash, e mi servirebbe una mano :-#

in poche parole, ho varie clip movie draggabili, e una sorta di contenitore al centro pagina, e vorrei che avvicinando al contenitore le clip con il mouse, rilasciando queste ultime, mi si piazzino detro al contenitore con una sorta di animazione, tipo l'aggancio di flash con le varie forme sullo stage... spero di essere stato chiaro, sono le 4 di notte, abbiate pietà di me ;-)

grazie ragazzi, spero di trovarmi bene con voi ;-]

Ciao Mekino,

puoi utilizzare la proprietà dropTarget per controllare se il MovieClip è stato rilasciato sul contenitore.

Nella guida di Flash, quella che hai anche tu sul computer e che si visualizza premendo F1, ho trovato un esempio che copio e incollo qui:

garbage_mc.onPress = function() {
this.startDrag();
};
garbage_mc.onRelease = function() {
this.stopDrag();
if (eval(this._droptarget) == trashcan_mc) {
this._visible = false;
}
};

Per questo esempio servono due MovieClip, uno si chiama garbage_mc che è la spazzatura, l’altro si chiama trashcan_mc ed è il cestino.
Questo esempio crea una spazzatura trascinabile, se quando rilasci la spazzatura questa si trova sul cestino sparisce.

Puoi copiare lo stesso script cambiando solo la parte che dice:

if (eval(this._droptarget) == trashcan_mc) {
this._visible = false;
}

con:

if (eval(this._droptarget) == trashcan_mc) {
this._x = 25;
this._y = 150;
}

Che invece di cambiare la visibilità cambia la posizione X e Y del MovieClip.
Ho messo dei numeri a caso, ma tu saprai quali sono le coordinate che ti servono.

 Professore, N.D.

Ciao Professore grazie per la risposta :-)
funziona tutto, anche andando a modificare x&y, ma nn riesco ad applicarlo al mio lavoro.

Ti spiego, nei vari movieclip è inserito un pulsante che tramite rollover/out mi fa partire delle piccole animazioni, e mi permette il trascinamento con le varie profondità.

Sono riuscito ad applicare il tuo codice, tramite un livello sullo stage, e funziona tutto, ma mi blocca l'animazione rollover/out delle varie movieclip sottostanti, sto provando ad inserire il codice nelle stesse movieclip ma nn riesco a venirne a capo cosa sto combinando?? :-#

ho provato a mandarti un pm, nn so se ci sono riuscito però :-?

Ciao Mekino,

il messaggio privato è arrivato e ti ho anche risposto.

Per quanto riguarda il “litigio” tra i due script dipende molto sicuramente da uno dei due motivi qui sotto:
a) una doppia definizione dellÂ’evento onRelease.
b) un pulsante dentro un altro pulsante.

Che vuol dire?

Le istruzioni che usi per i tuoi blocchi sono fondamentalmente sette, gestite da quattro eventi:

onRollOver
1. Fai partire lÂ’animazione che colora di rosso il blocco.

onRollOut
2. Fai partire lÂ’animazione che torna indietro e ricolora il blocco di bianco.

onPress
3. Porta in primo piano.
4. Inizia il trascinamento.

onRelease
5. Smetti di trascinare.
6. Controlla dove è stato rilasciato il clip.
7. (eventualmente) Aggiusta la posizione del clip.

Tutti questi eventi possono funzionare assieme sullo stesso oggetto MovieClip.
Se però il tuo script è spezzettato, ovvero è inserito in parti separate del filmato potrebbe capitare che per una svista tu abbia detto a un oggetto di smettere di essere trascinabile onRelease e allo stesso oggetto di aggiustare la posizione xy onRelease. Siccome un oggetto può avere un solo evento onRelease il secondo sovrascrive il primo.

La seconda opzione è anche più probabile visto che parli di Pulsanti dentro ai MovieClip.
Se hai un Pulsante con delle azioni e lo incorpori dentro a un MovieClip il pulsante funziona correttamente.
Se però assegni al MovieClip contenitore alcune azioni proprie dei pulsanti (come onPress, onRelease, onRollOver, ecc...) queste azioni intercettano il Mouse prima del Pulsante contenuto, così ottieni che le azioni “esterne” (cioé assegnate al MovieClip) funzionano ancora, mentre le azioni “interne” (quelle assegnate al Pulsante interno al MovieClip) non funzionano più.

Quindi il mio consiglio è di fare l’elenco delle azioni comandate dal Mouse e poi scriverle tutte quante assieme assegnandole allo stesso oggetto (il MovieClip contenitore o il Pulsante contenuto), così non si litigheranno più.

 Professore, N.D.

Rieccomi Professore ti ringrazio per il pm :-p

Ho fatto esattamente come mi hai consigliato tu, e in effetti tutto funziona meglio, ma mi trovo in difficoltà ad inserire il droptarget.

Ho iserito il codcie solo all'interno del pulsante, dato che il contenirote movieclip dovra allargarsi e il pusante dovrà scomparire in un secondo momento.

Questo è il codice che ho inserito



on (rollOver) {
gotoAndPlay("rollover");
}
on (rollOut) {
gotoAndPlay("rollout");
}
on (press) {
this.swapDepths(10)
startDrag("", false, 309, 63, 920, 687);
}
on (release) {
stopDrag();
}



Se provo ad inserire il droptarget come nel tuo esempio precedente, quindi andando ad indicare un movieclip di base che attiva l'azione se si trascina il pulsante sopra,nn funziona, ho provato ad inserire al posto del movieclip di base x&y ma nemmeno funziona, da solo nn ci arrivo, come posso inserire il dropTarget in un pulsante all'interno di un movie clip? :-#

ok credo di esserci riuscito cioè... funziona, ma sicuramente il codice è scritto male cmq eccolo qui


on (rollOver) {
gotoAndPlay("rollover");
}
on (rollOut) {
gotoAndPlay("rollout");
}
on (press) {
this.swapDepths(10)
startDrag("", false, 309, 63, 920, 687);
}
on (release) {
stopDrag();
if (this.hitTest(_root.trashcan_mc)) {
this._x = 537.5;
this._y = 312;
}
}


in questo caso cosa gli ho detto che se il pulsante in cui è contenuta questa azione tocca "trashcan_mc" mi deve portare suddetto pulsante alle cordinate x&y che ho deciso io giusto?

Ti mando il link per farti vedere ok? :-#

Ciao...

ho visto il filmato e funziona bene, naturalmente ti verranno in mente altre migliorie da fare perché non si è mai contenti del proprio lavoro (questo lo so bene).

Il codice che hai scritto funziona, non c’è altro da aggiungere, soprattutto se le scadenze si avvicinano e ci sono altre cose da fare...
hai intuito che si può migliorare e questo è sempre vero, qualunque codice si può migliorare, per esempio nel tuo caso potresti creare un oggetto con tutte le funzionalità, scrivendo una sola volta i vari rollOver, rollout, ecc... e poi concludere specificando che i tuoi quattro elementi devono ereditare il comportamento dell’oggetto creato.

Con questo sistema potresti creare non quattro, ma centinaia di oggetti simili con meno righe di codice, però ti voglio dire una cosa che è poco da “professore” ma è vera: quello che conta è soltanto il risultato finale.

Avrai tempo per imparare nuove tecniche e i tuoi risultati saranno migliori ogni volta, ma visto che hai la fortuna di lavorare per clienti veri non formalizzarti se il codice non è pulito, pensa alla consegna e rimanda le pignolerie a quando avrai tempo libero (anche se ti auguro di non averne mai), altrimenti non lavori più.

 Professore, N.D.
001design.it ® è un marchio registrato.
© 2004-2017 Molfese Paolo - P.Iva: 03430820617 - All rights reserved | Tutti i diritti sono riservati.