Puoi accedere a proprietà e metodi (funzioni) di un .swf solo a caricamento completato quindi nel filmato index.swf scrivi:
Codice PHP:
var request:URLRequest = new URLRequest("intro.swf");
var loader:Loader = new Loader()
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, introCaricata);
function introCaricata(evento:Event):void
{
var mySWF:MovieClip = evento.target.content as MovieClip
addChild(loader);
mySWF.caricaHome();
}
Come puoi vedere una soluzione potrebbe essere quella di creare una variabile di tipo MovieClip a cui assegnare il valore del contenuto del loader che in questo caso è l'oggetto che scatena l'evento: COMPLETE.
Dopo di che puoi utilizzare l'oggetto Loader come se fosse un normale MC e pertanto chiamare la funzione al suo interno.
Sorge un problema:
In questo modo, viene caricato immediatamente il filmato 'Home.swf' chiamato dalla funzione e quest'ultimo, andrà a sovrapporsi al filmato 'Intro.swf' che rimarrà in esecuzione appesantendo inutilmente la memoria del FlashPlayer.
Sarebbe meglio rimuoverlo dalla DisplayList quando e se non serve più e per farlo, potresti fare così:
Nel filmato index.swf invece di chiamare la funzione 'caricaHome' crei una funzione che rimuove la intro e la chiami dalla intro stessa:
In 'index.swf' scrivi:
Codice PHP:
var request:URLRequest = new URLRequest("intro.swf");
var loader:Loader = new Loader();
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, introCaricata);
function introCaricata(evento:Event):void
{
addChild(loader);
}
function resettaIndex():void
{
removeChild(loader);
}
In intro.swf crei un pulsante che chiama la funzione di caricamento 'home.swf' (altrimenti verrebbe caricata immediatamente) oppure puoi usare un Timer in modo che l'aggiunta del filmato home.swf avvenga quando vuoi tu e non prima.
Quindi nel filmato intro.swf inserisci il codice:
Codice PHP:
var loaderHome:Loader;
pulsante.buttonMode = true
pulsante.addEventListener(MouseEvent.CLICK, caricaHome);
function caricaHome(evento:MouseEvent):void
{
var request:URLRequest = new URLRequest("home.swf");
loaderHome = new Loader();
loaderHome.load(request);
loaderHome.contentLoaderInfo.addEventListener(Event.COMPLETE, homeCaricata);
}
function homeCaricata(evento:Event):void
{
var filmatoIndex:MovieClip = this.parent.parent as MovieClip
filmatoIndex.resettaIndex();
filmatoIndex.addChild(loaderHome);
}
Come vedi in questo esempio a caricamento completato ho dichiarato una variabile di tipo MovieClip a cui ho assegnato il valore/posizione di 'index.swf' e nella riga successiva chiamo la funzione 'resettaIndex' che rimuove il filmato 'intro.swf'.
Infine, sempre facendo riferimento a 'index.swf' che in pratica è il filmato 'contenitore principale' aggiungi 'home.swf'.
ciao