Comunidad de diseño web y desarrollo en internet online

Acceso a variables de otras clases

Citar            
MensajeEscrito el 23 Oct 2008 03:45 pm
Wenas, estoy creando una aplicacion en AS3, y por ahora tengo 2 clases:
Principal que es la clase principal del documento.
Principal.as

Código :

package 
{
   import flash.display.MovieClip;
   public class Principal extends MovieClip
   {
      public var Card:Carta;// = new Carta();
      public var arrayCartas:Array = new Array(7);
      private var contCarta:Number=0;
      private var contTipos:Number;
      
      public function Principal()
      {
         for(contTipos = 0; contTipos < 4; contTipos++)
         {
            for(contCarta = 2; contCarta < 15; contCarta++)
            {
               Card = new Carta();
               //Codigo elimniado para que no se haga muy largo todo
               Card.CargarCarta();
               addChild(Card);
            }
         }
      }
   }
}


y despues tengo un mc llamado Carta.

Carta.as

Código :

package 
{
   import flash.display.MovieClip;
   import flash.events.MouseEvent;
   import flash.display.Loader;
   import flash.net.URLRequest;
   
   import Principal;
   public class Carta extends MovieClip
   {
      //Codigo elimniado para que no se haga muy largo todo
      public function Carta()
      {
         addEventListener(MouseEvent.MOUSE_DOWN, mouse_down);
      }
      public function CargarCarta()
      {
         contenedor.load(new URLRequest("Cartas windows/" + ID + ".png"));//("Cartas clasicas/" + ID + ".png"));
         contenedor.x = -36;
         contenedor.y = -48;
         addChild(contenedor);
      }
      
      private function mouse_down(event:MouseEvent):void
      {
         SeleccionarCarta();
      }
      private function SeleccionarCarta()
      {
         //Como deberia acceder aqui al arrayCartas de la clase Principal??   
      }
   }
}


Como puedo acceder desde SeleccionarCarta al array arrayCartas de Principal????

Un saludo

Por X-TUS

94 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Oct 2008 04:17 pm
Pasalé como argumento a la función el arrayCartas
De todos modos (tampoco me hagas mucho caso) ¿no sería mejor que la función SeleccionarCarta fuera de la propia clase Principal?

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Oct 2008 04:28 pm
Hombre, la funcion SeleccionarCarta solo se va a ejecutar cuando se haga clic en las cartas, No se si tiene sentido que este accesible para todas las otras clases. De todos modos estoy empezando con esto de AS3, (asi que tampoco me hagas mucho caso jejeje).
Voy a probar lo que comentas a ver que tal.

Gracias

Por X-TUS

94 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Oct 2008 04:42 pm
Cambiar la funcion SeleccionarCartas a la clase Principal parece que no funciona, pq al llamar a la funcion desde la clase Cartas, me sigue dando el mismo error.

Por X-TUS

94 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Oct 2008 05:27 pm
Hola

Mira, lo q yo haria es lanzar un evento personalizado desde Carta

Código :

this.dispatchEvent(new Event("select_carta", true));


Y en la clase principal lo capturaria (fijate q se le debe asignar el listener a la clase principal)

Código :

this.addEventListener("select_carta", onSelectCarta)



Igualmente estaria bueno q definas para q neceistas acceder desde carta a principal, ya q por lo gral en oop eso se debe evitar...

Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 23 Oct 2008 06:07 pm

alfathenus escribió:


Igualmente estaria bueno q definas para q neceistas acceder desde carta a principal, ya q por lo gral en oop eso se debe evitar...

Voy a hacer una aplicacion que calcule tu mano en Poker.
La idea era crear cada carta con su evento MOUSE_DOWN, y al hacer clic se añade la carta a un array que existe en principal, para cuando se pulse el boton de "comprobar mano" (que será otra clase), este te devuelva el ranking de tu mano.
Por eso pensé en hacer el array en principal, porque asi lo tengo accesible desde la clase cartas, y desde la clase comprobarMano. Ahora que dices que es mejor evitar ese tipo de cosas, no se donde colocar el array... :crap:
¿Donde seria recomendable ponerlo? ¿o cual seria el planteamiento correcto?

Muchas gracias

PD: Ya se que parece una chorrada de aplicacion, pero la tenia hecha en AS2 y queria empezar a meterme en AS3 con algo sencillo.

Por X-TUS

94 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Oct 2008 07:01 am
Yo daría "comprotamiento" a las cartas en la película principal. Vamos

Código ActionScript :

//en la clase Principal
public function Principal()
      {
         for(contTipos = 0; contTipos < 4; contTipos++)
         {
            for(contCarta = 2; contCarta < 15; contCarta++)
            {
               card = new Carta();
               //Codigo elimniado para que no se haga muy largo todo
               card.CargarCarta();
               //le añado el listener
               card.addEventListener(MouseEvent.MOUSE_DOWN, mouse_down)
               addChild(card);
            }
         }
        private function mouse_down(event:MouseEvent):void
        {
         //usaremos event.currentTarget para saber cuál se ha pulsado
         SeleccionarCarta(Carta(event.currentTarget));
       }
      }

Dejando en la clase Carta sólo aquellos métodos (funciones) propios de ella. Por ejemplo si queremos voltear una carta, creamos una "public function voltearCarta:void()" DENTRO de Carta.as, y en la función mouse_down podríamos escribir

Código ActionScript :

Carta(event.currentTarget).voltearCarta();

Pero ya te digo que es como yo lo haría (desconozco la complejidad del problema)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Oct 2008 10:36 am
Joder, muchisimas gracias. Al fin funciona!!!

La complejidad del problema por ahora es ninguna, el problema viene que estoy empezando en AS3 y aparte que no se como estructurar las cosas, los eventos me estan volviendo loco...

De todos modos gracias de nuevo. Creo que ya entiendo un poco mejor los eventos.

Un saludo

Por X-TUS

94 de clabLevel



 

firefox

 

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