Comunidad de diseño web y desarrollo en internet online

referencias a stage desde una clase externa

Citar            
MensajeEscrito el 10 Abr 2009 07:08 pm
Hola amigos,


Estoy intentando hacer una aplicacion compuesta de 3 juegos basicos (que permita seleccionar a qué juego jugar y cuando acabe el juego muestre una puntuacion. Me gustaría desarrollar independientemente los juegos y la aplicacion principal. Para ello me he creado un fichero eolo_juego.fla (el documento es EoloJuegoMain) desde el que exporto una navecita (eolo.Hydra) que controlo desde EoloJuegoMain.

La estructura de ficheros es la siguiente:

Código :

- eolo_juego.fla
+ eolo
      - EoloJuegoMain.as
      - Hydra.as: (de momento es un cuadrado que se mueve)


En este punto, el contructor de EoloJuegoMain no recibe ningun parámetro.

La animacion funciona perfectamente.

El problema viene cuando quiero utilizar este juego desde una clase que lo controle (Main.as) En esta clase se decidiría qué juego lanzar.
Ahora la estructura de ficheros es la siguiente:

Código :

- Main.fla
- Main.as
- eolo_juego.fla
+ eolo
      - EoloJuegoMain
      - Hydra

El problema que tengo es que no sé por qué no consigo añadir al stage la clase eolo.EoloJuegoMain. Supuse que tendría que ir pasando el stage desde la clase principal hacia "dentro". El resultado es que no se ve nada:

En Main.as:

Código :

// file Main.as
package {
   import flash.display.MovieClip;
   import eolo.EoloJuegoMain;

   public class Main extends MovieClip {

      private var eolo:EoloJuegoMain;

      public function Main() {
         trace(this);
         eolo =  new EoloJuegoMain(stage);
         addChild(eolo);
         eolo.play();
      }
   }
}


En eolo.EolojuegoMain:

Código :

// file eolo/EoloJuegoMain.as
package eolo{
   
   import flash.display.MovieClip;
   import flash.display.Stage;

   public class EoloJuegoMain extends MovieClip {

      public function EoloJuegoMain(stageRef:Stage) {
         // create hydra
         var hydra:Hydra= new Hydra(stageRef);

         //add it to the main display list
         stageRef.addChild(hydra);

         // position on stage
         hydra.x = stageRef.stageWidth / 2;
         hydra.y = stageRef.stageHeight / 2;

      }
   }
}   



Lo curioso es que si pongo un listener a eolo.Hydra que detecte Event.ENTER_FRAME, lo detecta correctamente (con un simple trace), pero mi pantalla sigue saliendo en blanco.
Además, si ejecuto eolo_juego.fla ahora me da un error de que EoloJuegoMain está recibiendo un parámetro, con lo cual no puedo desarrollar independientemente cada juego en si y la aplicacion.
Tambien estoy viendo que no sé cóm se hará para ver el fondo que sí que se ve en al version individual del juego (eolo_juego.fla)

Supongo que algo estoy haciendo mal con las referencias a stage... :? , pero le he dado mil vueltas y mucho google, pero estoy atrapado y bastante desesperado.

Saludos!

Por jpgmahedero

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Abr 2009 03:41 am
Yo para referirme al stage desde una clase externa (que generalmente extiende la clase MovieClip) utilizo el .parent pero haciendo el casting a MovieClip, es decir (this.parent as MovieClip), supongo que en tu código lo escribirías en lugar del stageRef

Podrías intentarlo, no sé si te funcione, pero a ver que pasa :P

Por -YO-

27 de clabLevel



 

México

firefox
Citar            
MensajeEscrito el 12 Abr 2009 04:11 pm
Muchas gracias por tu respuesta :-)

Lo he probado, pero me sigue pasando lo mismo. Ahora he simplificado mas aún a ver si la gente se anima y me sacan de este jaleo. Debe ser algo muy sencillo, pero no doy con ello.

Tengo un Main.as desde el que quiero llamar a BotonMain que a su vez contiene un Boton (creado en el fichero Boton.fla) Todo el conjunto se llamará desde Main.fla

Código :

// fichero Main.as
package {
   import boton.*;
   import flash.display.MovieClip;
   public class Main extends MovieClip {
      public function Main() {
         trace(this);
         var botonMain:MainBoton = new MainBoton();
         addChild(botonMain);
         
      }
   }
}


Aqui va el código de boton.MainBoton

Código :

// fichero boton/MainBoton
package boton{
   import flash.display.MovieClip;
   import flash.display.Stage;
   public class MainBoton extends MovieClip {
      public function MainBoton() {
         trace(this);
         var botonPrueba:Boton = new Boton();
         botonPrueba.x=100;
         botonPrueba.y=100;
         addChild(botonPrueba);
      }
   }
}

Finalmente la clase Boton la creé con flash en el fichero Boton.fla y la exporté para action scirpt

Código :

// fichero boton/Boton.as
package boton{
   import flash.display.MovieClip;
   public class Boton extends MovieClip {
      public function Boton() {
         trace(this);
      }
   }
}


El problema es que si ejecuto Main.fla no se vé nada en el display aunque las trazas son correctas, pero si ejecuto Boton.fla sí.
Es importante que se den estos dos niveles: primero Main, y luego BotonMain. ¿Cómo hariais esto vosotros?
El objetivo final de tener dos niveles es tener una clase Main que controle la aplicación y que instancie clases (controladores las llamo) dependiendo de eventos. Estas controladores lanzados desde Main son aplicaciones en sí mismas (juegos). Lo que quiero es desde las controladoras se controle que el juego ha acabado y se lance un evento hasta Main


Ideas, sugerencias, código e incluso collejas por hacer las cosas mal son bienvenidas
Jose Pedro

Por jpgmahedero

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Abr 2009 07:27 am
Supongo que el problema es que estás intentando "acceder al stage antes de tiempo", leeté el artículo de Llops (al final es sólo controlar las cosas en un evento add_to_stage)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Abr 2009 11:23 am
Gracias ELiseo2 por el apunte.

He visitado la pagina de Llop y su tutorial me funciona tal y como es, pero nuevamente si añado otra clase por encima no se ve. Es decir, si desde Main llamo a un BotonMain y desde BotonMain llamo a Boton, clase en la que los graficos UNICAMENTE se crean con as, todo va bien, pero si a Boton le añado algo de decoracion con el ide de flash, no se ve. :? Unicamente se ve el código escrito con as. Entonces me extraña, que teniendo una jerarquia de tres niveles 1-Main 2-BotonMain 3-Boton no se pueda mostrar el boton.

De todas formas gracias por mostrarme el blog de LLops, muy bueno. También le he escrito a él. Cuando sepa qué está pasando os cuento.

Saludos,

Por jpgmahedero

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Abr 2009 11:48 am
Perdonamé por no haberme leído el post entero. (y, por tanto, no darme cuenta del problema)
Creo que debes usar un loader para añadir la película y que no vale con un "new" (pero dejamé un poco de tiempo de investigación y me aseguro)

Por Eliseo2

710 de clabLevel



 

firefox

 

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