Comunidad de diseño web y desarrollo en internet online

Como acceder a las propiedades del Stage desde una Clase??

Citar            
MensajeEscrito el 25 Ago 2011 01:11 am
Hola!,

He estado probando pegar un movieClip desde la libreria dinámicamente al escenario poniendo el código desde la línea de tiempo y lo hace bien. El problema es que al intentar crear una clase con la misma función, no he podido accesar a las propiedades del Stage, me provoca un "Error #1009: Cannot access a property or method of a null object reference." al momento de compilar. Cómo debo hacer para acceder a las propiedades del stage desde una clase?

Gracias!

Aquí el código que puse en mi timeline:

Código ActionScript :

//
import unaClase;

var miClase:unaClase = new unaClase();
   addChild(miClase);


import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;

var unaVentana:Sprite = new elMovieDeLaLibreria(); //"elMovieDeLaLibreria" es el linkageName que se le dio al MovieClip para llamarlo via código
   unaVentana.x = stage.stageWidth/2 - unaVentana.width/2;
   unaVentana.y = stage.stageHeight/2 - unaVentana.height/2;
   unaVentana.name = "unaVentana";

var unCampo:TextField = new TextField();
   unCampo.text = "Esta ventana se pegó desde la libreria y este campo de texto se creo dinámicamente en su interior.";
   unCampo.autoSize = TextFieldAutoSize.LEFT;
   unCampo.selectable = false;
   unCampo.wordWrap = true;
   unCampo.width = unaVentana.width-20;
   unCampo.x = unaVentana.width/2 - unCampo.width/2;
   unCampo.y = unaVentana.height/2 - unCampo.height/2;
   unaVentana.addChild(unCampo);

   addChild(unaVentana);

//


Al ejecutar ese código todo sale bien, pega desde la librería un movieclip llamado "elMovieDeLaLibreria" y crea en su interior un campo de texto, centra la ventana, centra el campo de texto etc..

Este es el código que puse en la clase:

Código ActionScript :

//
package  {
   
   import flash.display.MovieClip;
   import flash.text.TextField;
   import flash.text.TextFieldAutoSize;
   import flash.display.Stage;
   
   public class unaClase extends MovieClip {
      
      public function unaClase() {
         // constructor code
         
      var unaVentana:MovieClip = new elMovieDeLaLibreria(); //"elMovieDeLaLibreria" es el linkageName que se le dio al MovieClip para llamarlo via código
         addChild(unaVentana);
         unaVentana.x = stage.stageWidth/2 - unaVentana.width/2;
         unaVentana.y = stage.stageHeight/2 - unaVentana.height/2;
         unaVentana.name = "unaVentana";
      
      var unCampo:TextField = new TextField();
         unCampo.text = "Esta ventana se pegó desde la libreria y este campo de texto se creo dinámicamente en su interior.";
         unCampo.autoSize = TextFieldAutoSize.LEFT;
         unCampo.selectable = false;
         unCampo.wordWrap = true;
         unCampo.width = unaVentana.width-20;
         unCampo.x = unaVentana.width/2 - unCampo.width/2;
         unCampo.y = unaVentana.height/2 - unCampo.height/2;
         unaVentana.addChild(unCampo);
      
         
         
      }

   }
   
}
//


Aquí ya sale el "Error #1009: Cannot access a property or method of a null object reference.". Si hago un trace(stage) me regresa null.

Lo que intento hacer desde la clase es como en el script que puse en el timeline, centrar la ventana del movieclip que coloque dinamicamente.

:( help!

Por cadaop

8 de clabLevel



 

safari
Citar            
MensajeEscrito el 25 Ago 2011 02:34 pm
La clase tiene que ser agregada al DisplayList mediante addChild. Si sabes que la estás agregando, agrega un listener al evento Event.ADDED_TO_STAGE para saber positivamente que ya está en el DisplayList y poder acceder al Stage

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2011 04:59 pm

solisarg escribió:

La clase tiene que ser agregada al DisplayList mediante addChild. Si sabes que la estás agregando, agrega un listener al evento Event.ADDED_TO_STAGE para saber positivamente que ya está en el DisplayList y poder acceder al Stage

Jorge


Hola Jorge!

Agregue el listener con el Event.ADDED_TO_STAGE tal y cómo dijiste y si, desde ahi hago un trace y si puedo acceder a las propiedades del stage, en este caso stageWidth.

Código ActionScript :

//
package  {
   
   import flash.display.MovieClip;
   import flash.text.TextField;
   import flash.text.TextFieldAutoSize;
   import flash.display.Stage;
   import flash.events.Event;
   
   public class unaClase extends MovieClip {
      
      public function unaClase() {
         // constructor code
      addEventListener(Event.ADDED_TO_STAGE, added);
//"elMovieDeLaLibreria" es el linkageName que se le dio al MovieClip para llamarlo via código
      var unaVentana:MovieClip = new elMovieDeLaLibreria(); 
         addChild(unaVentana);
         
      }
      
      public function added(evt:Event):void{
         
         trace("Stage " + stage.stageWidth); //Regresa 550
         
      }

   }
   
}
//


El problema ahora, es como pasarle esos parámetros al constructor de la Clase para que pueda centrar el movieClip que estoy pegando dinámicamente. Deberé siempre crear una variable que guarde el stageWidth?

Gracias! :)

Por cadaop

8 de clabLevel



 

safari
Citar            
MensajeEscrito el 25 Ago 2011 06:06 pm
No lo hagas en el constructor, pasa la creación del MC al método added

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 26 Ago 2011 01:53 am

solisarg escribió:

No lo hagas en el constructor, pasa la creación del MC al método added

Jorge


Hola Jorge!, creo que ya quedó.

En el constructor únicamente agregue el listener con el evento ADDED_TO_STAGE y el addChild(unaVentana); del MovieClip que estoy pegando desde la librería.

Al pegarse el movie al Stage, el listener ejecuta el método crearVentana(); y este centra la ventana y crea el resto de los objetos.

Ahora ya puedo acceder a las propiedades del Stage, entonces de ahora en adelante debe ser así siempre? Esta bien así?

:) Mil gracias por tu ayuda!


Código ActionScript :

//
package  {
   
   import flash.display.MovieClip;
   import flash.text.TextField;
   import flash.text.TextFieldAutoSize;
   import flash.display.Stage;
   import flash.events.Event;
   
   public class unaClase extends MovieClip {
      
      public var unaVentana:MovieClip;
      
      public function unaClase() {
         // Se agregó el listener ADDED_TO_STAGE para que cuando agregue el movieClip al Stage ejecute la funcion "inicia"
         addEventListener(Event.ADDED_TO_STAGE, inicia);
         //"elMovieDeLaLibreria" es el linkageName que se le dio al MovieClip para llamarlo via código
         unaVentana = new elMovieDeLaLibreria();
         //Se agrega el movie al Stage
         addChild(unaVentana);
      }
      
      public function inicia(evt:Event):void{
         //Eliminamos el listener
         removeEventListener(Event.ADDED_TO_STAGE, inicia);
         //Iniciamos la funcion que "crea" la ventana
         creaVentana();
      }
      
      public function creaVentana()
      {
         unaVentana.name = "unaVentana";
         unaVentana.x = stage.stageWidth/2 - unaVentana.width/2;
         unaVentana.y = stage.stageHeight/2 - unaVentana.height/2;
         
      var unCampo:TextField = new TextField();
         unCampo.text = "Esta ventana se pegó desde la libreria y este campo de texto se creo dinámicamente en su interior.";
         unCampo.autoSize = TextFieldAutoSize.LEFT;
         unCampo.selectable = false;
         unCampo.wordWrap = true;
         unCampo.width = unaVentana.width-20;
         unCampo.x = unaVentana.width/2 - unCampo.width/2;
         unCampo.y = unaVentana.height/2 - unCampo.height/2;
         
         unaVentana.addChild(unCampo);
         
      }
   }
   
}

//

Por cadaop

8 de clabLevel



 

safari

 

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