Comunidad de diseño web y desarrollo en internet online

Duda básica... espero!! Comunicación emtre clases

Citar            
MensajeEscrito el 27 Feb 2011 10:16 pm
Buenas,

Hace poco que me ha pasado a AS3 y creo que voy a enloquecer con algo que debe ser sencillo. He puesto el código resumido, lo que creo que es importante. A ver si alguien me puede ayudar:

Tengo una archivo AS WebZona2.as, en el que se definen una variable, un clip vinculado desde la biblioteca MP, el cual contiene el menu principal y una clase op_inicio, que contiene uno de los archivos externos a mostrar

Código ActionScript :

import _clases.PreloadArchivo;
import _clases.VideoInicio;
   
public class WebZona2 extends MovieClip
{
   public var x_menu_on:int=770;         
   public var mp:ClipMenuPrincipal=new ClipMenuPrincipal();  
   public var op_inicio:VideoInicio= new VideoInicio();
}                  


Por otro lado, tengo el archivo de la clase Video inicio (VideoInicio.as), que contiene una de las secciones de la web.

Código ActionScript :

package _clases
{
   import flash.display.MovieClip;
   import flash.events.*;
   import fl.video.FLVPlayback;
   import fl.video.VideoEvent;
   import fl.video.VideoProgressEvent;
   import fl.video.MetadataEvent;
   
   public class VideoInicio extends MovieClip
   {
      var ab:AniBienvenidos= new AniBienvenidos();
      var carga_ok:Boolean=true;      
      var carga_video:Boolean=false;   
      
      var seg_ab_on:Number=12;      
      var seg_ab_off:Number=19.4;      
      var seg_mp:Number=4;      
      var seg_reset:Number=58;

      function VideoInicio(mp1:MovieClip):void
      {
         trace("Clase Video Momentos Inolvidables Cargado...");      


Mi pregunta es:

¿Puedo acceder a las propieades del clip mp desde el archivo de la clase VideoInicio?

Es decir, ¿Cómo debería acceder, por ejemplo a la propiedad alpha del clip mp desde la clase Video Inicio?

Gracias por adelantado

Por rafamele

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 28 Feb 2011 02:31 am
Si puedes, para eso necesitas primero acceso al stage. Para lograrlo agrega tu clase al mismo:

Código ActionScript :

this.addChild(op_inicio);


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 28 Feb 2011 06:35 am
Hola Hernan,

Gracias por tu respuesta y disculpa por mi ignorancia, pero cuando dices que lo añada al stage, no te refieres a que añada ese código en ninguna de las dos clases que he puesto anterioremente ¿verdad?

¿En que parte del código debería añadirlo?

Gracias

Por rafamele

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 28 Feb 2011 08:48 am
En el DocumentClass.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 28 Feb 2011 10:11 am
Muchas gracias,

La verdad es que no entiendo muy bien lo del DocumentClass, prefiero documentarme con las pistas que me has dado y probar con un archivo pequeño, tipo hola mundo y a ver si de esa manera saco las ideas claras.

Os mantendré informados!

Por rafamele

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 28 Feb 2011 10:46 pm

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 28 Feb 2011 10:56 pm
Hola de nuevo,

Ahora ya tengo asumido y creo que bien entendido el DoumentClass, muchísimas gracias; pero como es normal, la curiosidad va creciendo y me surge otras duda. Ante el siguiente código:

Document Class

Código ActionScript :

package  
{
   import flash.display.MovieClip; 
   import WebZona0;
   
    public class HolaMundo extends MovieClip
   {
      var webzona0:WebZona0=new WebZona0();
      var esc:Escenario= new Escenario();

      //constructor clase principal
      public function HolaMundo() 
      {
         addChild(webzona0.mp);  
         addChild(esc);         
         
         webzona0._situa();         
         webzona0._addListeners();   
         
         esc._situa();
         esc._cambia_alpha();
      }
      
      public function _invisible(obj:MovieClip):void
      {
         obj.alpha=0;
         trace("ejecuta función invisible");
      }
   }
}


Clase WebZona0

Código ActionScript :

package  
{
   import flash.display.MovieClip;
   import flash.events.MouseEvent;

   public class WebZona0 extends MovieClip
   {
      public var mp:ClipMenuPrincipal=new ClipMenuPrincipal();  //contiene el clip con el menu
      
      public function WebZona0() 
      {
         // constructor code
         trace("Clase WebZona0 Cargada...");
      }
      
      public function _situa():void
      {
         mp.x=150;
         mp.y=225;
      }
      
      public function _addListeners():void
      {
         mp.btn_inicio.addEventListener(MouseEvent.CLICK, evt_mouse);
      }
      
      private function evt_mouse(e:MouseEvent):void
      {
         switch(e.type)
         {
            case "click":      trace("click: "+e.currentTarget.name);
                           break;
         }
      }
   }
}



Clase Escenario

Código ActionScript :

package  
{
   import flash.display.MovieClip;

   public class Escenario extends MovieClip
   {
      public var cu:Cuadrado=new Cuadrado(); 

      public function Escenario() 
      {
         addChild(cu);
      }
      
      public function _situa():void
      {
         cu.x=400;
         cu.y=250;
      }
      
      public function _cambia_alpha():void
      {
         
      }
   }
}



Se prodría acceder, por ejemplo a la función _invisible de la clase principal desde las clases WebZona0 o Escenario?

Y lo más difícil: ¿Se podría acceder a esta misma función desde la clase WebZona0 pasándole un clip de la Clase Escenario?

Lo único que se me ocurre sería hacer todas las funciones de la aplicación en la clase principal, pero entiendo (... o deseo!!!) que tiene que haber otra forma más sencilla. He intentado mediante root y parent, pero o no sirve para eso o no he sabido hacerlo

Muchas gracias!

Por rafamele

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 01 Mar 2011 10:41 am
Pues puedes acceder a las instancias desde el stage, puedes crear una clase controladora para herederar los métodos o armar una clase Singletone para manejar centralizada cierta información.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

chrome
Citar            
MensajeEscrito el 01 Mar 2011 11:31 am
Hola Hernán,

Acceder a las instancias lo tengo controlado, o eso creo.

El método Singelton lo he mirado, pero no creo necesario implementarlo para este caso.

Pero... ¿cómo se crearía una clase controladora? tienes algún link de interés

Por rafamele

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 01 Mar 2011 12:53 pm
root y parent sí sirven, sólo que tienes que hacer una "conversión de cast" a MovieClip -es debido a que flash, de parent sólo sabe que es un DisplayObject -que no permite llamara a la función-

Código ActionScript :

MovieClip(parent)._invisible()
MovieClip(parent).esc._situa();

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Mar 2011 12:55 pm

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Mar 2011 04:42 pm
Hola Eliseo,

Entiendo el código que me dices, pero aunque compila perfectamente, cuando ejecuto la llamada a la la función me genera el siguiente error.

Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo. at WebZona0/evt_mouse()

El código es exactamente el anterior, excepto el cast que me indicabas. He probado con parent y con root y en ambos casos me genera el mismo error

¿Alguien sabe a que se debe?

Por rafamele

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 01 Mar 2011 04:49 pm
¿está añadido al stage?. Es que si no no tiene ni padre ni madre

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Mar 2011 04:54 pm
Mediante addChild quieres decir???

No entiendo bien qué quieres decir

Por rafamele

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 01 Mar 2011 05:04 pm
Disculpa Eliseo,

Creo que ya he encontrado el problema, o eso espero!

Cómo bien decías, me faltaba un addChild,

Había añadido la clase, pero no la variable que contiene el menú

Creo que con las dudas que me habéis resuelto empiezo a manejarme mejor en AS3

Gracias ambos, habéis sido de gran utilidad!

Por rafamele

6 de clabLevel



 

msie8

 

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