Flash: swf esterni, transizioni e preloading

Salve ragazzi mi sono appena iscritto volevo porvi un questito sperando che mi risponderete...
ho sempre realizzato animazioni semplici e fine a se stesse adesso mi trovo a dover realizzare un sito intero ho quindi bisogno di capire come si fa il collegamento da un animazione all'altra ovviamente senza uscire e magari anche con un effetto di transizione o un preload...
Grazie!
Non conosco nulla sull'argomento quindi non tralasciate quasi niente

 truman, N.D.

Ciao Truman,

dire tutto quello che serve per fare un sito completo senza tralasciare niente non è una cosa da fare in un solo thread...

Vediamo di affrontare un problema per volta per razionalizzare il problema.

[SIZE=2]UNO: Caricare un filmato esterno[/SIZE]
Puoi caricare un SWF dentro un altro SWF utilizzando uno dei seguenti sistemi:
1. la funzione loadMovieNum (AS 2.0 e precedenti)
2. la classe loadMovie (AS 2.0 e precedenti)
3. la classe MovieClipLoader (AS 2.0)
4. la classe flash.display.Loader (AS 3.0)

I primi due sistemi non sono in grado di gestire un Preload, quindi sarà necessario che i filmati che carichi abbiano il loro proprio preload.
Gli ultimi due possono gestire il Preload direttamente, quindi puoi anche caricare filmati che non hanno un loro proprio preload.

Il sistema da utilizzare dipende dal risultato che vuoi ottenere, dalla versione di Flash che stai usando e dalla versione del Player che sarà necessaria per visualizzare il filmato.
Ti consiglio di studiare dal manuale di Flash la classe MovieClipLoader perché è la più usata al momento, così puoi trovare più esempi in rete.
Sarebbe bello anche iniziare direttamente con la classe flash.display.Loader, visto che prima o poi la versione 3.0 di ActionScript sarà l’unica supportata, però iniziare da subito con ActionScript 3 comporta che la maggior parte dei tutorial che si trovano in rete non potrai usarla: non è possibile utilizzare ActionScript 2.0 e 3.0 contemporaneamente.

[SIZE=2]DUE: Effetti di Transizione[/SIZE]
Se vuoi realizzare transizioni animate puoi seguire due strade:

1. Transizione sulla Timeline.
2. Transizione da Script.

Le transizioni sulla Timeline sono utilizzate quando la grafica cambia completamente l’aspetto del filmato, alcuni siti utilizzano addirittura dei filmati per passare da una scena all’altra.
In questo caso avresti un filmato contenitore con tutte le transizioni e alcuni fotogrammi chiave in cui l’animazione si ferma e carica il nuovo contenuto.

Le transizioni da Script sono utili quando non si sa che aspetto avrà il filmato dopo il caricamento, si usano per fare entrare il filmato caricato con un movimento o con una dissolvenza.
Non è necessario avere più fotogrammi, ne basta uno: tutti i movimenti e gli effetti sono comandati tramite script.

[SIZE=2]TRE: Preload[/SIZE]
Internet è pieno di esempi di preload, su questo forum l’argomento è stato trattato milioni di volte... basta una ricerca.
Ricordati che, come ti ho detto al punto UNO, il preload deve essere contenuto nel filmato che vuoi caricare se stai usando la funzione loadMovieNum o la classe loadMovie.

[SIZE=2]QUATTRO: Domande[/SIZE]
1. Che versione di Flash stai utilizzando?
2. Che comandi conosci di ActionScript?
3. Da quanto tempo usi Flash?

 Professore, N.D.

Ti ringrazio professore vivamente per la risposta cosi tanto completa.
Beh allora ti dirò le cose come stanno sto realizzando un sito che somigli molto a quell della tatangelo www.annatatangelo.com dopo la prima pagina vedi il menu come è fatto quello che sale già l'ho riprodotto siccome non posso fare un unico filmato perchè le alte pagine avranno foto e anche video volevo fare più animazioni non mi interessa di ripetere ogni volta il menu non è un problema però non so proprio coem fare....vedi quello tatangelo passa da una pagina all'altra o meglio da un animazione all'altra in un modo trasparentssimo...
Io diciamo che mi arrangio scopiazzando dico la verità le mie conoscenze in flash sono veramente poche....
utilizzo flash mx e so realizzare diciamo dei menu semplici e semplici animazioni di ascript non so nulla...e tantomeno epr quei comandi che mi hai detto mai sentiti...
una volta creai un preload preso da internet ma andava per conto suo nel senso che era al 100 per cento anche prima di aver scaricato...per ora lasciamo stare il preload e se puoi dai un occhiata a quel sito per capire cosa voglio fare e come poso fare....
ti ringrazio!!!;-)

 truman, N.D.

Ciao truman,

se hai realizzato già il menu che compare da sotto potrai benissimo realizzare quello che hai in mente.

Non ho molto tempo per fare prove oggi, credo che se stai usando Flash MX dovremo per forza utilizzare la classe loadMovie e questo è un peccato perché con la classe movieClipLoader ci sbrighiamo in un attimo ma serve almeno Flash MX 2004.

Siccome il procedimento per la classe movieClipLoader è veramente breve lo scrivo qui sotto, sperando che funzioni...

Cominciamo a preparare tutto... ti servono tre cose sullo Stage:
1. Un MovieClip che farà da contenitore “segnaposto” sul quale caricherai i vari contenuti.
2. Un MovieClip che mostrerà una barra di caricamento, così la realizzi una volta sola e funzionerà per ogni swf.
3. Naturalmente un Menu, ma va benissimo quello che hai già fatto.

Naturalmente ti servono uno o più swf esterni da caricare, così da fare le prove, preparali anche finti, metti un’immagine qualsiasi per fare peso (altrimenti il preload sarà troppo breve e non si vedrà). Vanno tutti nella stessa cartella, così quando provermo a caricarli non avremo difficoltà a trovarli.

Io ho creato tre filmati per fare questo esperimento:
- loadme.swf ---- contiene una foto molto grande e nient’altro.
- loadme2.swf ---- contiene anche lui una foto grande.
- home.swf ---- che è quello che useremo come contenitore per tutto quanto.

Dentro il filmato home ho inserito tre oggetti e uno script:
1. holder ---- un MovieClip che fa da segnaposto per i filmati da caricare.
2. barra ---- un MovieClip che si “allarga” in proporzione alla percentuale caricata.
3. un pulsante ---- lo userò per cambiare contenuto.

Tutto lo script è inserito dentro al fotogramma 1 ed è questo:

//-----------------------------------
var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
percent = Math.round(bytesLoaded*100/bytesTotal);
barra._xscale = percent;
};
mcLoader.addListener(listener);
mcLoader.loadClip("loadme.swf",holder);
//-----------------------------------

Così appena faccio partire il filmato vedo già un preload e carico il primo contenuto, la variabile percent la puoi usare anche in una casella di testo per mostrare la percentuale di caricamento.

Ora che l’oggetto è pronto posso caricare quello che voglio al suo interno: SWF, JPG, PNG o GIF. Ogni volta che faccio partire un caricamento la barra della percentuale farà nuovamente il suo lavoro.
Per cambiare contenuto basta dire all’oggetto creato di caricare un contenuto diverso, per esempio io nel pulsante ho messo questo:

//-----------------------------------
on(press) {
mcLoader.loadClip("loadme2.swf",holder);
}
//-----------------------------------

Quando premo il pulsante riparte il preload e il contenuto precedente viene sostituito dal nuovo contenuto.


Come ti dicevo prima per utilizzare questa Classe serve almeno Flash MX 2004...

Se davvero la versione che stai usando è Flash MX dovrai rinunciare al “preload centralizzato” e anche per le transizioni sarà tutto più difficile.

Prova l’esempio descritto e se non funziona cambia gli script in questa maniera:

//-----------------------------------
// Nel fotogramma
holder.loadMovie("loadme.swf");
//-----------------------------------

//-----------------------------------
// Nel pulsante
holder.loadMovie("loadme2.swf");
//-----------------------------------

Affideremo la gestione del preload ad ogni filmato caricato, individualmente.

 Professore, N.D.

Professore come sempre alto livello...ti ringrazio ancora
cmq utilizzo flash mx 2004 figurati pensavo fosse la stessa cosa con l'mx mi chiedevo se potevo inviarti il file che sto preparando in effetti è di un amico che però mi sta dando troppe rogne...
ti mandavo il file cosi tu mi aggiungevi quel codice o vedevi cosa ho fatto fino adesso.....

 truman, N.D.

Ciao Truman,

non ricevo mai file sorgenti da nessuno, tutto il (poco) tempo che ho lo dedico a questo Forum e lo spirito del Forum è quello di scrivere risposte che abbiano un valore per tutti i visitatori, non soltanto per chi pone la domanda.

Se aggiungessi direttamente il codice al tuo file nessuno vedrebbe il risultato.

 Professore, N.D.

Hai ragione, è giusto all'occorrenza trovarsi le risposte che si cercano...quindi facciamo in modo che quando cercano notizie sull'argomento le trovino;)lo facciamo per loro...;)

Allora io ho provato a fare qualcosina di quello che mi hai detto ma nulla di nuovo allora ti rispiego brevemente quale è il mio caso da applicare in effetti anch eper questo sito di fotografia...

http://spazioinwind.libero.it/aw/Sitofotografo/index8.html

sempre che sto facendo ma il ragionamento mi serve proprio in generale per imprarare visto che è una cosa fondamentale.

quando si clicca sul menu (incompleto) in basso su un immagine si deve passare a dun altra animazione senza cambiare pagina e fin qui ci siamo.
Siccome ho visto ch utilizzo flash mx 2004 quale è la cosa in assoluto più semplice??

a me serve poter passare per esempio al file prova.swf che non ha niente a che fare con quello cioè non ha niente in comune perchè per facilitarmi il lavoro (diciamo per facilitarmi) ripeterò il menu per tutte le sette pagine.

 truman, N.D.

Professore dove sei finito!!!mi serve una mano!!!

 truman, N.D.

ciao Truman,mi intrometto e me ne scuso, non mi piace fare questo...ma permettimi.Il professore e' sempre molto molto puntuale nelle risposte. Se non lo fara' probabilmente avra' le sue buone ragioni, visto che comunque cerca di rispondere almeno una volta a tutti...Non mi sembra bello invocarlo cosi', tutto qui'.

 dar_pri, N.D.

Rieccomi....

Grazie Dario per essere intervenuto in mia difesa, il tempo è sempre poco e le richieste sono tante.

Vediamo qual’è la soluzione più semplice per fare cambiare scena ad un filmato Flash, caricando filmati esterni e usando Flash MX 2004.

Il preload lo faremo fare all’oggetto MovieClipLoader.
La transizione la faremo fare all’oggetto Tween.
Il menu sarà soltanto uno, lo posizioneremo nel filmato principale, così da non dover ripetere le stesse cose più volte.

Deve contenere le seguenti cose:
- Un MovieClip chiamato holder che fa da segnaposto per caricare i contenuti.
- Il menu, i cui pulsanti richiameranno una funzione che gestisce tutto.
- Un MovieClip chiamato barra che ci serve per il preload.
- Le azioni, tutte, così da non dover spezzettare il lavoro in filmati diversi.

Le azioni da inserire sono queste:

////---------------------------------------
import mx.transitions.Tween;
var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
percent = Math.round(bytesLoaded*100/bytesTotal);
barra._xscale = percent;
barra._visible = true;
};
listener.onLoadComplete = function() {
var entraTween:Tween = new Tween(_root.holder, "_x", mx.transitions.easing.Back.easeIn, _root.holder._x, 0, 1, true);
barra._visible = false;
};
mcLoader.addListener(listener);
function carica(cosa) {
var esciTween:Tween = new Tween(_root.holder, "_x", mx.transitions.easing.Back.easeIn, _root.holder._x, Stage.width, 1, true);
esciTween.onMotionFinished = function() {
mcLoader.loadClip(cosa,holder);
}
}
////--------------------------------

Questo script comanda il movimento, con la classe Tween, il caricamento e il preload, con la classe MovieClipLoader, e mette a disposizione una funzione, che ho chiamato carica.

Ogni volta che vogliamo cambiare scena basta richiamare la funzione carica e passarle il nome del filmato esterno, per esempio un pulsante potrebbe avere questa azione:

////--------------------------------
on (press) {
carica("filmato1.swf");
}
////--------------------------------

Non serve altro perché il movimento, il caricamento e il preload sono controllati tutti dallo script principale.

 Professore, N.D.

Ancora Grazie, ho visto in un altro font che hanno fatto la stessa domanda e c'è un asoluzione che sembra nettamente più semplice visto che per la mia poca poca esperienza non riesco a portare a termine...
inserendo solo il comando
on (press) {
loadMovieNum("filmato.swf", 1);
}

qando provo in flash si apre e funziona solo che mi restituisce questo errore

Errore: un'azione 'with' non è riuscita perché l'oggetto specificato non esiste.

e quando lo pubblico poi non funziona proprio cosa può essere??



 truman, N.D.

up grazie mille e scusate

 truman, N.D.

Ciao Truman,

la funzione loadMovieNum che hai trovato non risolve tutti i problemi che ci eravamo ripromessi di affrontare:

- Non gestisce il preload.
- Non gestisce le transizioni.
- Caricando contenuti sul _level1 copri il menu, che si trova su _level0, così da essere costretto a ripetere il menu su un livello superiore o su tutti i filmati esterni che carichi.

Per questo torno a consigliarti lo script precedente.

Se l’errore l’oggetto specificato non esiste compare usando lo script che ti ho postato è perché non esiste l’istanza di MovieClip chiamata holder e quindi una delle azioni with contenuta nella classe movieClipLoader fallisce.

Se hai un errore in fase di prova è normale, o quantomeno prevedibile, che il filmato pubblicato non funzioni.

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