Flash: animazione in play o in reverse comandata da pulsante.

Di: dar_pri | 26/09/2020 18:28:15
Ciao a tutti.Rieccomi, come fare a meno di rivolgermi a voi...sigh...Dunque,il mio problema:
Vorrei fare una cosa,ogni volta che faro' un rollOver
ad un determinato btn le "clip" andranno ad un determinato frame, mentre con il rollOut avranno la funzione di stopparsi.Ecco, banale direi fino a qui'...il punto e' che vorrei che nel momento stesso nel quale uso il rollOut la "clip" in questione riesca a riconoscere lo stop, e questo ovvio che lo fara'..., ma come posso far rimanere in "memoria" il punto esatto e da li retorcedere tornando al punto di partenza...Giuro che ho provato di tutto.Mi sono chiesto se potevo inserire variabili...cosi' da poi richiamarle con il rollOut,frame precedenti etc...ora chiedo umilmente se qualcuno ha un'idea? Scrivo lo script riportandolo alla base pura, povero di ulteriori tentativi...grazie per la pazienza di leggere, comunque...!

Risposte



on (rollOver) {
onde1.gotoAndPlay(2);
onde2.gotoAndPlay(2);
onde3.gotoAndPlay(2);
onde4.gotoAndPlay(2);
onde5.gotoAndPlay(2);
onde6.gotoAndPlay(2);
}
on (rollOut) {
onde1.stop();
onde2.stop();
onde3.stop();
onde4.stop();
onde5.stop();
onde6.stop();
}

Di: dar_pri | 26/09/2020 18:28:15


Ciao dar_pri,
se ho capito bene hai un pulsante e sei clip filmato.
Quando il puntatore del mouse si trova sul pulsante vuoi che tutti e sei i MovieClip mostrino la loro animazione in avanti, quando invece il pulsante si trova al di fuori del pulsante ti piacerebbe vedere i vari clip filmato riprodursi “al contrario” dal fotogramma in cui si trovano fino al primo fotogramma.
Si può procedere in diversi modi, a seconda dell’effetto che vuoi ottenere e della versione di Flash che intendi usare.
Ti posto una soluzione che funzionerà con Flash 6 e successivi, ma non per questo è una soluzione complicata, tutt’altro.
Prima di tutto devi posizionare i vari MovieClip sulla scena, immagino che tu li abbia già messi in posizione.
non serve che questi clip abbiano una azione di Stop al loro interno, gli diremo tutto quello che devono fare successivamente
Poi devi posizionare il pulsante ma può anche essere un Clip Filmato, non ha importanza
Al pulsante devi assegnare un nome, come hai fatto per i Clip Filmato, nell’esempio ho usato il nome btn.
A questo punto scrivi le azioni per tutti in un unico script, questo script va assegnato al fotogramma anche se serve a definire il comportamento di tutti gli oggetti.
Da quando Flash è giunto alla versione 6 uso sempre questo sistema, definendo tutte le azioni dei vari oggetti in un unico posto ho un maggiore controllo del filmato.
Lo script da assegnare al fotogramma è questo:
function assegna(aChi) {
aChi.stop();
aChi.onEnterFrame = function() {
if (_root.avanti == true) {
this.nextFrame();
} else {
this.prevFrame();
}
};
}
btn.onRollOver = function() {
_root.avanti = true;
};
btn.onRollOut = function() {
_root.avanti = false;
};
assegna(onde1);
assegna(onde2);
assegna(onde3);
assegna(onde4);
assegna(onde5);
assegna(onde6);

A questo punto il filmato dovrebbe già funzionare, ma ti spiego nel dettaglio quello che abbiamo fatto...
La prima funzione, assegna(aChi), serve per scrivere una volta sola il comportamento di tutti i nostri clip filmato, quando la richiameremo basterà mettere tra parentesi il nome di un clip filmato e lei gli assegnerà il comportamento.
Quale comportamento?
Innanzi tutto gli dice di fermarsi con aChi.stop().
Poi gli dice che fare qualcosa, con la stessa frequenza di riproduzione di tutto il filmato aChi.onEnterFrame = ......
Cosa è questa cosa che il nostro clip deve fare?
Se la variabile avanti sulla _root è vera il clip deve spostarsi avanti di un fotogramma, nextFrame(), e siccome la frequenza con cui lo fa è la stessa del filmato il suo comportamento sarà uguale a quello che avrebbe se fosse in Play.
Se la variabile avanti sulla _root è falsa deve andare indietro di un fotogramma, prevFrame(), mostrandoci la sua animazione al contrario.
A questo punto ci dobbiamo occupare del pulsante.
Lo chiamiamo per nome e gli assegnamo le azioni per il RollOver e per il RollOut, esattamente come se le avessimo scritte direttamente dentro al pulsante stesso.
Quello che gli diciamo di fare è di “accendere” o “spegnere” la variabile avanti così che i vari clip filmato sappiano se andare avanti o indietro.
Ultima cosa, per ogni clip filmato assegnamo tutte le azioni, semplicemente richiamando la funzione assegna() con il nome dei vari clip.
Questo sistema mi sembra abbastanza carino:
non abbiamo bisogno di prendere nota del fotogramma in cui avevamo fermato i nostri clip filmato (ma per completezza ti dico che avremmo potuto farlo con la proprietà _currentframe);
non ci serve scrivere tante volte la stessa azione, così se dovessero aumentare i clip filmato che vogliamo muovere basterà aggiungere ulteriori chiamate alla funzione assegna();
l’animazione si muove sempre dal fotogramma in cui si trova, sia avanti che indietro, fermandosi solo al primo o all’ultimo fotogramma.
Buon lavoro.

Di: Professore | 26/09/2020 18:28:15


come sempre se non di piu', grazie!

Di: dar_pri | 26/09/2020 18:28:15