Flash 8: tween class - effetto yoyo

Di: rikkardone | 26/09/2020 18:13:12
Ho applicato un'effetto trasparenza ad un Movie Clip con le Tween Class.
Questo il codice applicato sul frame:
.................................
function TRASPARENZA(mc, inizio, fine, tempo) {
QUALE = mx.transitions.easing.Back.easeOut;
TRASPARE = new mx.transitions.Tween(mc, "_alpha", QUALE, inizio, fine, tempo, false);
}
.................................
Questo il codice applicato sul bottone che regola il tutto:
.................................
on (rollOver) {
TRASPARENZA(CLIP,0,100,50);
TRASPARE.yoyo();
}
.................................
Come mai non va?
Se tolgo l'opzione "yoyo" l'effetto va; però io voglio che il Movie Clip continui ad apparire e a sparire... Cosa sbaglio?
Grazie

Risposte



Ciao Rikkardone,
il metodo yoyo ha effetto soltanto alla fine di una transizione, per questo il manuale di Flash consiglia di usarlo col gestore onMotionFinished.

Di: Professore | 26/09/2020 18:13:12


Grazie Professore,
proverò ad applicare il tuo consiglio...

Di: rikkardone | 26/09/2020 18:13:12


Applicato: FUNZIONA!

Di: rikkardone | 26/09/2020 18:13:12


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.

Di: Professore | 26/09/2020 18:13:12


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

Di: Professore | 26/09/2020 18:13:12


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

Di: Professore | 26/09/2020 18:13:12