This is a discussion on Caricare un swf esterno con Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Non c'è più...loadMovie non c'è più :) finalmente :) Lo ritenevo un metodo davvero inutile.
Con Actionscript 3.0 e Flash ...
Non c'è più...loadMovie non c'è più :) finalmente :) Lo ritenevo un metodo davvero inutile.
Con Actionscript 3.0 e Flash CS3, tutti quelli che non hanno mai avuto l'occasione di apprendere la Classe MovieClipLoader di Flash 8 hanno una grandissima possibilità di farlo adesso e farlo per sempre!
AS 3.0 implementa la Classe Loader che permette di caricare files esterni al nostro swf principale.
Nell' esempio seguente spiego come poterla utilizzare al meglio e vedremo che è davvero semplice.
Come sempre, creo un FLA e lo salvo chiamandolo test_load.fla
Creo una MovieClip e la chiamo info_mc, al cui interno creo le grafiche necessarie per dare un aspetto da 'Loader', quindi con un campo di testo che visualizzerà la percentuale di caricamento ed una barra che farà altrettanto.
Creo un file AS e lo chiamo Loading.as salvandolo nella stessa cartella in cui si trova il FLA.
Loading.as ( ormai credo si sia capito :P ) è la nostra Document Class, scritta in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.text.TextField;
import flash.display.Loader;
import flash.events.*;
import flash.net.URLRequest;
public class Loading extends MovieClip
{
private var url:String;
private var loader:Loader;
public function Loading()
{
stage.frameRate=31;
info_mc.visible=false;
init();
}
private function init():void
{
url='http://www.flepstudio.org/swf/my_swf.swf?cachebuster='+new Date().getTime();
var request:URLRequest=new URLRequest(url);
loader=new Loader();
initListeners(loader.contentLoaderInfo);
loader.load(request);
}
private function initListeners(dispatcher:IEventDispatcher):void
{
dispatcher.addEventListener(Event.COMPLETE,completato);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR,seErrore);
dispatcher.addEventListener(Event.OPEN,inizia);
dispatcher.addEventListener(ProgressEvent.PROGRESS,inCaricamento);
}
private function initButtonListener():void
{
ricarica_btn.addEventListener(MouseEvent.CLICK,scarica);
}
private function inizia(event:Event):void
{
removeButtonListener();
info_mc.visible=true;
debug_txt.text='INIZIO';
}
private function inCaricamento(event:ProgressEvent):void
{
var n:uint=(event.bytesLoaded/event.bytesTotal)*100;
info_mc.loading_txt.text='Loading '+n.toString()+' %';
var nn:uint=(event.bytesLoaded/event.bytesTotal)*info_mc.border_mc.width;
info_mc.fill_mc.width=nn;
debug_txt.appendText('.');
}
private function completato(event:Event):void
{
debug_txt.appendText('FINITO');
info_mc.visible=false;
addChild(loader);
loader.x=10;
loader.y=10;
loader.width=loader.height=200;
initButtonListener();
}
private function seErrore(event:IOErrorEvent):void
{
trace("ioErrorHandler: "+event);
}
private function scarica(event:MouseEvent):void
{
removeChild(loader);
removeListeners(loader.contentLoaderInfo);
init();
}
private function removeButtonListener():void
{
ricarica_btn.removeEventListener(MouseEvent.CLICK,scarica);
}
private function removeListeners(dispatcher:IEventDispatcher):void
{
dispatcher.removeEventListener(Event.COMPLETE,completato);
dispatcher.removeEventListener(IOErrorEvent.IO_ERROR,seErrore);
dispatcher.removeEventListener(Event.OPEN,inizia);
dispatcher.removeEventListener(ProgressEvent.PROGRESS,inCaricamento);
}
}
}
Risultato:
Naturalmente ho creato l'swf da caricare in cui, in questo caso ho inserito un'immagine di circa 1.7MB per far si che si apprezzino tutte le fasi del caricamento.
ho seguito tutte le specifiche per caricare e scaricare swf esterni...una domanda.
Se utilizzo questo sempice codice:
// dichiaro la funzione per caricare swf esterno
function carica (event:MouseEvent): void
{
var request:URLRequest = new URLRequest("PLAYCLIP.swf");
var loader:Loader = new Loader();
loader.load(request);
addChild(loader);
}
// azione al pulsante per richiamare la funzione "carica"
carica1.addEventListener(MouseEvent.CLICK,carica);
possibile che non ci sia una funzione da richiamare da un'altro pulsante che scarichi il file appena caricato?
noto che con questo metodo non riesco a caricare correttamente un swf esterno ( si tratta di un player con 3 traccie esterne ad esso).
Carica si il player, ma la musica si sente strana..ripo rallentata ma con tanti echo..
una alla volta nel senso ke... la prima viene caricata automaticamente (magari con un preload), quando si sceglie di andare avanti di traccia, carica la seconda e poi play.. mah forse è già troppo..infondo è un semplice player..con play stop pause prec e succ.
ho testato su un server e ha lo stesso problema... mmm senti tu stesso (ps non fare caso alla traccia è per prova :) ) http://www.vitodito/vtprova/vitodito1.html
ti spiego cosa ho fatto
ho importato
flash.display.loader
flash.net.URLRequest
poi aggiunto in una funzione
addEventListener(Event.ENTER_FRAME, loadplayer)
e poi la funzione loadplauer
p='mini_audio_player.swf';
var request:URLRequest= new URLRequest(p);
loader=new Loader();
loader.load(request);
non mida nessun errore (naturalmente è ancora la base ) non si vede nemmeno il player.. è solo per prova
Stai caricando mini_audio_player.swf con un Event.ENTER_FRAME... in pratica carichi lo stesso SWF 62 volte al secondo
Per caricare un SWF devi usare Event.COMPLETE,nomeFunzione
Così:
var request:URLRequest= new URLRequest(p);
loader=new Loader();
loader.loaderContentInfo.addEventListener(Event.CO MPLETE,finitoDiCaricare);
loader.load(request);
e poi:
function finitoDiCaricare(event:Event):void
{
addChild(loader);
}