Comunidad de diseño web y desarrollo en internet online

comunicar dos swf con dispacthEvent

Citar            
MensajeEscrito el 25 Ene 2009 05:54 pm
Hola...

Tengo una película con una serie de botones y que la quiero usar como "escenario" para ir cargando distintas galerías. Cada galería es un swf. Lo que me gustaría es deshabilitar los botones del "escenario" cuando se carga una galería.

Tengo dos tipos de clases. Una controla la funcionalidad de los botones y está asociada al archivo "escenario". Las otras controlan a cada una de las galerías.

Lo único que tienen en común estas clases, es que quiero enviar un evento de una a otra.....

Espero que se entienda.... Muchas Gracias.

Por audilon

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Ene 2009 07:41 am
Como yo lo haría es
1.-Tenemos la Clase Main (tu película principal) que tiene los dos objetos "Escenario" y "Galería".
2.-Galería dispatcha un evento (que es recogido en la Clase Main)
3.-Cuando la Clase Main escucha el evento, ejecuta un método de la clase "Escenario".

Código ActionScript :

public Class Main extends MovieClip{
    private var escenario:Escenario
    private var galeria:Galeria
    public function Main(){
          escenario=new Escenario();
          galeria=new Galeria();
          galeria.addEventListener("CUSTOM_EVENT",galeriaEvento);
   }
  private function galeriaEvento(e:Event):void{
       escenario.hazAlgo();
  }
}

No sé si me explico como un libro cerrado o no

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 29 Ene 2009 06:20 pm
Yo estoy en el mismo problema... el código ese no lo entiendo :S

Mi intensión es que cuando hago el loadMovieNum... todos los botones de la película principal se desabiliten (pero que los botones de la película que llamé con el loadMovieNum sí funcionen). Y que cuando cierre ese movie clip que llamé, los botones de la película principal vuelvan a funcionar.

Vendría a ser un sistema como el de esas galería de imágenes que cuando le das click se hacen grandes y el fondo se oscurece. Es decir, la película principal queda como "atras" y eso que llamaste se pone al frente.

Un ejemplo de lo que quiero hacer se encuentra aquí http://www.fmkabul.com/indexk.php

Gracias!

Por Fabricio

12 de clabLevel



 

Rosario

firefox
Citar            
MensajeEscrito el 30 Ene 2009 08:03 am
Fabricio, se puede hacer de muchos modos,
A Bote pronto podemos pensar en dos clases
1.-La Clase de la película principal, donde estarían los botones
2.-La Clase que muestra la imaagen ampliada
O bien
1.-La Clase principal
2.-Una Clase "Menu" donde estarían tus botones
3.-La Clase de la imagen ampliada.

(Para gustos están los colores)
Puesto que la Clase que muestra la imagen ampliada es seguro que la vamos a tener, veamos qué es loq ue tiene que hacer y/o tener
Yo tendría dos métodos
1.-Mostar una imagen
2.-Cerrar la imagen
Así que vamos para allá
¡IMPORTANTE! el código SEGURO que tiene ERRORES, es sólo para que se vea la lógica de la aplicación

Código ActionScript :

package{
  public class ImagenGrande extends Sprite{
        var ldr:Loader;
        public funcion ImagenGrande(){
              botonCerrar.addEventListener(MouseEvent.MOUSE_DOWN, cerrarImagen)
        }
        public function mostrarImagen(string:url):void{
            ldr= new Loader();
            var urlReq:URLRequest = new URLRequest(url);
            ldr.load(urlReq);
            addChild(ldr);
        }
        private function cerrarImagen():void{
             parent.removeChild(this);
        }
}

La película principal tendría algo como

Código ActionScript :

var imagenGrande:ImagenGrande=new ImagenGrande()
addChild(imagenGrande);
imagenGrande.mostrarImagen("imagen.jpg")

Vemos que, cuando cerramos la imagen, la película principal NO se entera de que se ha cerrado. ¿cómo lo hacemos? pues con un dispathEvent.
Cambiemos la función cerrarImagen() por algo como

Código ActionScript :

        private function cerrarImagen():void{
             parent.removeChild(this)
             dispatchEvent(new Event("CERRAR"));
        }

Vemos que, cuando se cierra, además de cerrarse "dispacha" un evento. Así, en nuestra película principal podemos recoger ese evento.

Código ActionScript :

var imagenGrande:ImagenGrande=new ImagenGrande()
addChild(imagenGrande);
imagenGrande.addEventListener("CERRAR",cerrarImagen)
private function cerrarImagen(e:Event){
     trace("Se cerró la imagen")
}
imagenGrande.mostrarImagen("imagen.jpg")

Vemos que, desde la película principal, se controla el evento igual que con cualquier evento, tenemos que añadir el listener y creamos una función, dentro de la función podemos hacer lo que queramos ("enablar" nuevamente los botones de un menú, por ejemplo)

Si tuviéramos una Clase Menu con los botones, deberíamos tenr una función pública enablarBotones y podríamos escribir en nuestra función main

Código ActionScript :

var imagenGrande:ImagenGrande=new ImagenGrande()
var menu:Menu=new Menu();
addChild(imagenGrande);
addChild(menu)

menu.enablarBotones(false);
imagenGrande.addEventListener("CERRAR",cerrarImagen)
private function cerrarImagen(e:Event){
   menu.enablarBotones(true);
}
imagenGrande.mostrarImagen("imagen.jpg")

Vemos que ImagenGrande NO sabe nada de Menu, que la comunicación entre ellas es siempre a través de la película principal. Vamos
ImagenGrande dispacha un evento -->Main lo recoge y ejecuta un método de Menu
Igualmente, la Clase Menu debería dispachar un evento con el argumento de la "url", pero NO haría nada más. Sería la clase Main la que, una vez recogido ese evento ejecutara el método de la Clase ImagenGrande

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 30 Ene 2009 06:05 pm
Voy a revisar un poco más esos códigos ya que nunca antes había usado algo así... si ven algún manual sobre esto me avisan :D

Gracias!!!

Por Fabricio

12 de clabLevel



 

Rosario

firefox
Citar            
MensajeEscrito el 30 Ene 2009 08:10 pm
Ve este tips, espero que te ayude

http://www.cristalab.com/tips/comunicacion-entre-clases-actionscript-3-con-eventdispatcher-c51078l/

Saludos

Por lororojo

52 de clabLevel



 

msie7
Citar            
MensajeEscrito el 31 Ene 2009 01:52 am
Gracias por el link!

Hay alguna manera de hacer algo parecido pero con ActionScript 2.0 ?

Por Fabricio

12 de clabLevel



 

Rosario

firefox

 

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