Assim que o swf carregado (ou o loader que o contem) esteja colocado na
display list tens acesso ao stage.
Podes estar a tentar aceder antes desse momento, se escutares o evento
Event.ADDED_TO_STAGE (>9.0.128) podes ter a certeza que tens acesso ao
stage.

Na aplicação* Main.as*

public function Main()
{
   if(stage)
      initialize();
   else
      addEventListener(Event.ADDED_TO_STAGE, initialize);
}

public function initialize(e:Event = null):void
{
    // A partir daqui tens acesso ao stage.
}



2009/11/17 Catarina <[email protected]>

>
> Olá a todos,
> estou mesmo a precisar de ajuda de alguém mais elucidado que eu...
>
> É o seguinte,
> primeiro fiz o preloader de uma forma que me parece simples e que
> noutras situações funcionou. Criei um novo documento, com um loader
> que carrega o swf do site propriamente dito para dentro do primeiro.
>
> var loader:Loader=new Loader();
> var req:URLRequest=new URLRequest("site.swf");
>
> loader.load(req);
> this.addChild(loader);
>
> loader.contentLoaderInfo.addEventListener
> (ProgressEvent.PROGRESS,loading);
> loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded);
>
> function loading(ev:ProgressEvent):void{
>        var percentil:Number=Math.round(ev.bytesLoaded/ev.bytesTotal*100);
>        preloader.percentagemTxt.text = percentil+"% a carregar...";
>        preloader.animacao.gotoAndStop (percentil); }
>
> function loaded(ev:Event):void{
>        preloader.visible=false;}
>
> Só que desta vez esta forma de resolver o problema não está a
> resultar, porque depois do swf carregado, quando posiciona o menu em
> relação ao stage ele dá erro:
> TypeError: Error #1009: Cannot access a property or method of a null
> object reference. at Main()
> Ou seja, já não consigo aceder ao stage. Não estou de todo a perceber
> porquê.
>
> Disseram-me que em as2 se resolvia facilmente a situação assim:
> this._lockroot = true;   ou    _global.newroot = this;
> Mas não consegui nada semelhante em as3.
>
>
> Então pensei: se isto assim não funciona é porque talvez não seja a
> forma correcta de o fazer. Por isso tentei fazer o preloader sem usar
> um segundo swf para onde carregar o primeiro. Mas também não tive
> sucesso:
>
> import flash.events.ProgressEvent;
>        public class Main extends MovieClip
>        {
>                private var seccaoTodas:MovieClip;
>                private var menu:Menu;
>                private var preloader:Preloader = new Preloader();
>
>                public function Main()
>                {
>                        addChild(preloader);
>                        preloader.animacao.stop();
>
>
>  this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, loading);
>
>  this.contentLoaderInfo.addEventListener(Event.COMPLETE, fim);
>                }
>
>                private function loading(ev:ProgressEvent):void
>                {
>                        var percentagem:Number = Math.round(ev.bytesLoaded /
> ev.bytesTotal
> * 100);
>                        preloader.animacao.gotoAndStop (percentagem);
>                        preloader.percentagemTxt.text = percentagem+"% a
> carregar...";
>                }
>
>                private function fim():void
>                {
>                        removeChild(preloader);
>                        addMenu();
>                        addExtras();
>                        listenersMenu();
>                }
>     }
>
> Assim o que acontece é que o preloader nem chega a aparecer. Fazedo
> simulate download, vejo a página branca (enquanto está a carregar) e
> depois puft! aparecem as secções e o menu. Preloader nada.... Se fizer
> um trace à percentagem ele devolve-me imediatamente 100%. Parece-me a
> mim que o this (this.loaderInfo.addEventListener) não está bem...
>
> Alguém me ajuda com uma solução simples?
> Obrigada.
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Recebeu esta mensagem porque está inscrito em Grupo "Mailing List da Comunidade 
Portuguesa de Rich Internet Applications - www.riapt.org" do Grupos Google.
 Para enviar mensagens para este grupo, envie um email para 
[email protected]
 Para anular a inscrição neste grupo, envie um email para 
[email protected]
 Para mais opções, visite este grupo em 
http://groups.google.com/group/riapt?hl=pt-PT
-~----------~----~----~----~------~----~------~--~---

Responder a