Comunidad de diseño web y desarrollo en internet online

OOP en AS 3 -> Compartir Variables

Citar            
MensajeEscrito el 24 Ene 2010 08:31 pm
Odio la poca documentación y lo mal que la presenta Adobe. He creado un proyecto con los siguientes elementos:

- Main.fla
- MainClass.as
- testing.fla

Lo que hice fue ponerle el mismo Document Class a Main y testing, y dentro una variable. Luego cargo dese Main a Testing que tiene un trace(user). Y no hace ni trace ni nada.

¿Alguien me explicaría en que estoy equivocando monumentalmente?

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 24 Ene 2010 08:39 pm
Un DocumentClass es unicamente para un .fla. No son para compartir. Es como si le pusieras el mismo código fuente al primer keyframe de ambos SWF.

Cargar testing desde Main es otra cosa diferente. Código de linea de tiempo también es algo diferente a Document Class. Lo primero que tienes que entender es eso.

Si quieres compartir variables entre swf, carga uno dentro del otro y pasasela al otro, controlando el SWF cargado como si fuera un clip desde el SWF madre. Piensa en la aplicación como un sólo Document Class, no como multiples.

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 24 Ene 2010 08:41 pm
Ok, entiendo el concepto. Más contando el esquema de carga nuevo de AS3. Pero no me queda claro el método para compartirlas.

Ahora modifique y tomo en cuenta que es un solo Document Class que cargo desde Main. Pero mi idea es que testing lo use para cargar otro tipo de info con otra Clase. Testing tiene dentro un botón. El tema es... ¿Como mierda accedo al botón de testing?

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 24 Ene 2010 08:48 pm

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 24 Ene 2010 08:49 pm
Mi punto Hernán, es que si no necesitas código en testing.fla, no lo pongas. Manten el código en clases que controlan desde el Document Class de Main a testing.

Dame un ejemplo más claro y te puedo dar una idea más clara.

Por Freddie

BOFH

53 tutoriales
597 articulos
43 ejemplos

Genero:Masculino   Admin

Conserje de Cristalab

firefox
Citar            
MensajeEscrito el 24 Ene 2010 08:54 pm
Zah, muy bueno tu artículo. Me ha servido, pero no para esto. je. Lo que quiero lograr es lo siguiente:

Main.fla -> Log In
testing.fla -> Checkout de Compras

Mi clase LogIn.as setea la sesión. Quiero pasarle a Checkout.as, ese usuario sin hacer algo como:

Código ActionScript :

checkout.startSession(Log._user);


Por eso mi problema real es converger las variables que usaré en una sola maestra para usar desde los diferentes entornos. Obviamente el tema es que sigo en "As2 mode" y me cuesta cambiar a "as3 mode"

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 24 Ene 2010 11:38 pm
me perdí un poco leyendo... pero antes decías que querías llegar a un boton de la clase Testing desde otra clase... A mi siempre me anduvo poner: Testing(boton)
Por ejemplo si quieres hacer que la película comience a reproducirse desde una clase que no sea la DocumentClass (Main), puedes poner:
Main(root).stop();

Por lucasmoyano

Claber

1960 de clabLevel

22 tutoriales

Genero:Masculino  

Developer

chrome
Citar            
MensajeEscrito el 24 Ene 2010 11:40 pm
tal y como dice Zah , un swf externo se comporta como un MovieClip , entonces para accesar algun objeto , variable , funcion .. de un swf externo se hace una conversion

Código ActionScript :

private function onComplete(e:Event):void
{
   var testing:MovieClip = MovieClip(e.target.content).someMovieClip.addEventListener(MouseEvent.CLICK,onClick);
}

private function onClick(e:MouseEvent):void
{
   //acciones
}


donde someMovieClip es el un objeto en el swf externo.

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 25 Ene 2010 01:35 am

lucasmoyano escribió:

me perdí un poco leyendo... pero antes decías que querías llegar a un boton de la clase Testing desde otra clase... A mi siempre me anduvo poner: Testing(boton)
Por ejemplo si quieres hacer que la película comience a reproducirse desde una clase que no sea la DocumentClass (Main), puedes poner:
Main(root).stop();


Si, pasa por no decir las cosas en orden. Más exacto:

1. Si, ya resolví el problema de accesar el botón.
2. Lo que quería saber es si puedo establecer variables entre Clases de uso común. Porque mi problema en realidad radica que la Clase LogIn setea el nombre de usuario, que luego necesito usar en mi Clase CheckOut. El tema es que tengo formas para hacerlo, puedo pasarle con un set a la Clase, puedo usar o hacer inyección entre Clases, pero quiero saber sino existe algún método, el que sea, para controlar la variable y hacerlas leerse entre Scopes. Algo como que dentro de una misma Clase, extienda a dos más, y sus "hijos" suban al nivel y compartan su info. ¿Se entendió algo? Je! :P

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 25 Ene 2010 02:02 am
Me olvidaba, para la cuestión en que tenía problemas, la comunicación al clip dentro de algo cargado, le dejo por si a alguien le sirve el código completo:

Código ActionScript :

package {

   import flash.display.MovieClip;
   import flash.net.URLRequest;
   import flash.display.Loader;
   import flash.events.*;
   
   public class MainClass extends MovieClip {

      var user:String = "hernan";
      var loader:Loader = new Loader();

      public function MainClass() {
         bt_1.addEventListener(MouseEvent.CLICK, loadStage);
      }

      private function loadStage(e:Event):void {         
         loader.load(new URLRequest("testing.swf"));
         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadSecondary);         
      }

      private function loadSecondary(e:Event):void {
         MovieClip(e.target.content).bt_1.addEventListener(MouseEvent.CLICK, getUser); 
         addChild(loader);
      }
      
      private function getUser(e:Event):void {
         trace(user);
      }
      
   }

}


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 25 Ene 2010 04:06 am
El chiste es que trates de armar una programación en que la clase no tenga que subir a una clase madre :P
No hay una forma directa para hacer eso porque no creo que sea lo más correcto.

Por lucasmoyano

Claber

1960 de clabLevel

22 tutoriales

Genero:Masculino  

Developer

firefox
Citar            
MensajeEscrito el 25 Ene 2010 02:38 pm

lucasmoyano escribió:

El chiste es que trates de armar una programación en que la clase no tenga que subir a una clase madre :P
No hay una forma directa para hacer eso porque no creo que sea lo más correcto.


Si es a la conclusión que estoy llegando. Fuck! Jejeje

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 25 Ene 2010 03:46 pm

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Ene 2010 01:52 am

Eliseo2 escribió:

echalé un vistazo a este post viejito


Sin duda muy interesante ;) Gracias por el tip

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox

 

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