Comunidad de diseño web y desarrollo en internet online

Problemas con Event.RESIZE

Citar            
MensajeEscrito el 23 Sep 2010 11:34 am
Estoy programando una página en as3,que tiene por una parte un precargador(archivo independiente) y la página principal(otro archivo).Bien pues el problema lo tengo con el precargador.Básicamente lo que intento es que la precarga este siempre alineada en el centro,a través del evento Resize.Esto me está danto problemas,ya que me lanza el típico error #1009(no se puede acceder a una propiedad...).Estuve probando a cambiar de lugar el evento,y solo hay un sitio donde no me lanza el error,pero claro no me funciona el resize.He intentado resumir el código lo máximo posible para que no sea demasiado tostón y dejar lo importante.A ver si veis algo raro o algún error.Gracias

Código :


public class Precargador extends Sprite {
      
      private var _animPreview:PrecargaPreview; 
      private var _anchuraIni:Number;
      private var _alturaIni:Number;
      private var _loaderSWF:Loader;
      
      public function Precargador() 
         {
         stage.align = StageAlign.TOP_LEFT;
         stage.scaleMode = StageScaleMode.NO_SCALE; 
         stage.addEventListener (Event.RESIZE, carga);
         
             function carga (event:Event):void
               {
               _animPreview.x = stage.stageWidth/2;
               _animPreview.y = stage.stageHeight/2;         
               }
         
         _loaderSWF = new Loader();
         _animPreview = new PrecargaPreview();
         addEventListener(Event.ENTER_FRAME, init);
         }
         
            
            
      // Inicializo el lanzador. Comienzo la carga de la peli principal
      private function init(evento:Event=null):void{
         if(stage.stageWidth == 0)
         {
            return;
         }
         
         removeEventListener(Event.ENTER_FRAME, init);
         
         _anchuraIni = 1000;
         _alturaIni = 625;
         _animPreview.x = stage.stageWidth/2;
         _animPreview.y = stage.stageHeight/2;
         
         _animPreview.init(loaderInfo.parameters.colorPrecarga);
         addChild(_animPreview);

         _loaderSWF.contentLoaderInfo.addEventListener(Event.OPEN, _animPreview.openHandler);
         _loaderSWF.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, _animPreview.progressHandler);
         _loaderSWF.contentLoaderInfo.addEventListener(Event.COMPLETE, _animPreview.completeHandler);
         _loaderSWF.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
         _loaderSWF.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
         _loaderSWF.load(getRequest());
               
      }

Por muse

50 de clabLevel



 

msie7
Citar            
MensajeEscrito el 24 Sep 2010 02:44 am
hola muse!
como va?

Intentemos primero ver el tema del error #1009 ....
y esto seguramente te esté pasando porque haces referencia al objeto "Stage" en tu constructor.
Cuando necesitas hacer referencia a Stage desde muy temprano en tu código, es altamente recomendable que utilices un listener para detectar el momento en que "stage" ya puede ser referenciado.

La idea sería tener un metodo auxiliar (por ejemplo llamémosle "init") donde al detectar que existe "stage", se ejecuten las declaraciones relacionadas con el "stage".

es decir, pasar de esto:

Código ActionScript :

...
public function Precargador() {
         stage.align = StageAlign.TOP_LEFT;
         stage.scaleMode = StageScaleMode.NO_SCALE; 
         stage.addEventListener (Event.RESIZE, carga);
         
             function carga (event:Event):void
               {
               _animPreview.x = stage.stageWidth/2;
               _animPreview.y = stage.stageHeight/2;         
               }
         
         _loaderSWF = new Loader();
         _animPreview = new PrecargaPreview();
         addEventListener(Event.ENTER_FRAME, init);
}
...


a esto:

Código ActionScript :

...
public function Precargador() {
   if(stage)
      init();
   else
      addEventListener(Event.ADDED_TO_STAGE, init);
}

public function init(e:Event = null):void{
   removeEventListener(Event.ADDED_TO_STAGE, init);
   stage.align = StageAlign.TOP_LEFT;
   stage.scaleMode = StageScaleMode.NO_SCALE; 
   stage.addEventListener (Event.RESIZE, carga);
         
   function carga (event:Event):void
      {
      _animPreview.x = stage.stageWidth/2;
      _animPreview.y = stage.stageHeight/2;         
      }
         
   _loaderSWF = new Loader();
   _animPreview = new PrecargaPreview();
   addEventListener(Event.ENTER_FRAME, init);
}
...


Saludos!

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 30 Sep 2010 01:53 pm
Gracias por la ayuda debosotnas,

Lo he probado y me funciona,aunque me sigue dando errores,creo que por el archivo main principal y no el precargador.Ahora no tengo mucho tiempo para hacer pruebas,pero en cuanto pueda de detallo los errores que me da.Queria responderte por lo menos y agradecerte la ayuda.

un saludo

Por muse

50 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.