Comunidad de diseño web y desarrollo en internet online

¿Como descargar un SWF Externo desde si mismo?

Citar            
MensajeEscrito el 03 Sep 2008 02:30 pm
Buenas, antes que nada les quiero agradecer a todos por este foro, que ya me ah ayudado innumerable cantidad de veces! =D
Ahora a lo que me compete... tengo un pequeño problema con el pasaje de AS2 a AS3. Estoy realizando un sitio íntegramente en Flash, el cual consta de una película principal ("Main.swf") y varias sub-películas ("Draws.swf", "Info.swf", "New.swf", etc.) el tema es el siguiente:
Desde la "Main.swf" llamo por medio de un botón ("Opcion1") a la película "Draws.swf" con el siguiente código.

Código :

var contenedor = new Loader();

Opcion1.addEventListener(MouseEvent.CLICK, carga)
     function carga(event:MoseEvent):void {
            contenedor.load(new URLRequest("Draws.swf"));
            stage.addChild(contenedor);
     }


esto funciona sin ningún problema... ahora si... en la película "Draws.swf" necesito generar un botón "Cerrar" que haga un unLoad en la película "Main.swf" de la variable "contenedor" para descargar la película "Draws.swf".
En AS2 eso lo lograba utilizando al famoso "_root", pero ahora la verdad no se que más hacer...
Si alguien puede darme una mano le estaré eternamente agradecido.

Desde ya muchas gracias por su tiempo.

Saludos!

Por MVazquez

5 de clabLevel



 

Buenos Aires, Argentina

safari
Citar            
MensajeEscrito el 03 Sep 2008 03:45 pm
Llamas a una función en la principal que lo descargue, ahora la mayoría de las propiedades ya no llevan el guion bajo, es decir _root es root

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2008 04:53 pm
seria algo así como:

Código :


Cerrar.addEventListener(MouseEvent.CLICK, descarga)
     function descarga(event:MoseEvent):void {
            root.contenedor.unload();
            root.removeChild(contenedor);
     }


donde Cerrar es el nombre del boton en la película "draws.swf"

Por MVazquez

5 de clabLevel



 

Buenos Aires, Argentina

safari
Citar            
MensajeEscrito el 03 Sep 2008 05:00 pm
unload no existe, removeChild lo tiene que ejecutar una función que esté en root, eso te dará un error (creo) del tipo "un llamador secundario blah blah ..." Ve haciendo las pruebas y postea si te sale error (y que dice el error)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 03 Sep 2008 08:02 pm
Así es como eh dejado cada película:
"Main.swf"

Código :

var contenedor = new Loader();

Opcion1.addEventListener(MouseEvent.CLICK, carga)
   function carga(event:MouseEvent):void {
      contenedor.load(new URLRequest("Draws.swf"));
      stage.addChild(contenedor);
      contenedor.x= stage.stageWidth/2 -390;
      contenedor.y= stage.stageHeight/2 -200;
      
   }

Donde Opcion1 es el botón que ejecuta la función, y contenedor la variable que genera el MC donde cargo "Draws.swf"

y luego en "Draws.swf"

Código :

Cerrar.addEventListener(MouseEvent.CLICK, descarga) 
function descarga(event:MouseEvent):void {
      stage.removeChild(contenedor);
}

donde Cerrar es el botón que ejecuta la función con el removeChild

Cuando ejecuto todo, me da el siguiente error...

Código :

ReferenceError: Error #1065: No se ha definido la variable contenedor.
at Draws_fla::MainTimeline/descarga()


Lo cual suena más que lógico...

Lo que se me ocurrió hacer, pero no tengo muy bien la idea del como hacerlo, es agregar un EventListener en "Main.swf" que escuche los eventos de "contenedor.Cerrar" y en cuanto haya un evento del tipo CLICK ejecute la función con el removeChild.

Nose... por ahi estoy diciendo pabadas...
se agradecen ideas ^_^

Saludos y Gracias nuevamente!!!

Por MVazquez

5 de clabLevel



 

Buenos Aires, Argentina

safari
Citar            
MensajeEscrito el 03 Sep 2008 08:45 pm
En el principal:

Código ActionScript :

function quitar(quien:String){
  removeChild(getChildByName(quien))
}

En el boton

root.quitar("contenedor")

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Sep 2008 01:03 pm
Muchas gracias por tu pronta respuesta.
El código me ha quedado así

"Main.swf"

Código :

var contenedor = new Loader(); //Variable que genera el MC para cargar los SWF Externos.

Opcion1.addEventListener(MouseEvent.CLICK, carga)
   function carga(event:MouseEvent):void {
      contenedor.load(new URLRequest("Draws.swf"));
      stage.addChild(contenedor);
      contenedor.x= stage.stageWidth/2 -390;
      contenedor.y= stage.stageHeight/2 -200;      
   }
   

function descarga(quien:String){
   removeChild(getChildByName(quien))
}



y en "Draws.swf"

Código :

Cerrar.addEventListener(MouseEvent.CLICK, test) 
function test(event:MouseEvent):void {
   root.descarga("contenedor")
}


y al ejecutar todo me da el siguiente código de error:

Código :

TypeError: Error #1006: descarga no es una función.
   at Draws_fla::MainTimeline/test()


sigue buscando la función descarga dentro de "Draws.swf" en lugar de en "Main.swf", algo estoy haciendo mail :S
alguna idea?

Por MVazquez

5 de clabLevel



 

Buenos Aires, Argentina

safari
Citar            
MensajeEscrito el 04 Sep 2008 01:10 pm
Cuando publicas Draws.swf solo, no lo encuentra porque no está allí. El modo estricto impide esas cosas. Prueba en un bloque try/catch para que compile

Código ActionScript :

function test(event:MouseEvent):void {
  try{
     root.descarga("contenedor")
  } catch(e:Error){}
}


Esto me recordó que iba a hacer un tip sobre funciones que solo existen runtime e idem en Flex, a ver si me hago un rato que ya son varios los POSTS de este tipo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Sep 2008 01:52 pm
Ahora directamente siquiera me aparece un error en la consola.
Simplemente no reacciona :(

Como tema aparte, sabes de algún tuto del que me pueda hacer para ir actualizando lo poco que se sobre la vinculación entre distintas instancias (distintos swf), como variables y eventos?

Desde ya y nuevamente... gracias por tu tiempo y dedicación. :)

Por MVazquez

5 de clabLevel



 

Buenos Aires, Argentina

safari
Citar            
MensajeEscrito el 04 Sep 2008 01:59 pm
Cambia descarga para ver si es llamada:

Código ActionScript :

public function descarga(quien:String){
   trace("Descarga con "+quien)
   removeChild(getChildByName(quien))
}


Saber de AS3? Leete a Moock: http://www.after-hours.org/foro/viewtopic.php?t=13934

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Sep 2008 02:13 pm
jajaja me pondré en campaña para conseguir el Essential ^_^

hice lo que me pediste y al momento de compilar me dique que la sentencia public debe ser usada dentro de un Package.

Disculpa que moleste tanto, realmente eh estado googleando como loco por este tema... y no encontré solución que me sirviera. :S

Por MVazquez

5 de clabLevel



 

Buenos Aires, Argentina

safari
Citar            
MensajeEscrito el 04 Sep 2008 02:27 pm
Sorry, lo de public no va

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 04 Sep 2008 02:38 pm
No hay problema, si hay alguna otra idea... bienvenida sea...
yo seguiré probando por mi parte.

Por MVazquez

5 de clabLevel



 

Buenos Aires, Argentina

safari

 

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