Comunidad de diseño web y desarrollo en internet online

Carga y descarga de swf externos con AS3

Citar            
MensajeEscrito el 16 Mar 2009 03:13 pm
Hola a todos:

Seguramente esto es una perogrullada pero me encuentro perdido con AS3, y este proyecto ya lo tengo que acabar en AS3, no cabe volver atras. al grano:


Tengo una pelicula principal desde la que cargo un swf externo (esta pelicula principal es un proyector de windows, aunque eso no creo que importe en mi consulta). La carga se hace de esta forma desde el fotograma 1 de la principal:

Código :

var loader:Loader = new Loader();

loader.load(new URLRequest("decoraciones.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);

function insertMovie(evt:Event):void{ 
   this.addChild(loader);
}


Esa pelicula que cargo cubre completamente la principal y contiene el tipico boton para cerrarla y volver a la principal.

ok, ¿como hago eso?

Gracias mil.

Por Kinetik

8 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 Mar 2009 05:26 pm
Uaa forma simple, usa this.visible = false

Si quieres quitarlo agrégalo en un nivel conocido, y despúes quítalo

var nivel = this.numChildren-1
this.addChildAt(loader, nivel)

Luego

this.removeChildAt(nivel)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por solisarg el 16 Mar 2009 05:59 pm, editado 1 vez

Argentina

firefox
Citar            
MensajeEscrito el 16 Mar 2009 05:47 pm
Demasiaso simple para ser cierto !!!

Lo probare, pero me surge una duda, si ese movieclip que quiero descargar contine listener y a su vez mas botones que muestran otros movieclips y tal, ocultarlo de esta forma puede dar algun problema? Es decir cuando lo hago invisible, en realidad esta ahi pero no se ve , ¿podria acceder a los botones que estan detras de el?.

Ademas es posible que en un momento dado tenga que volver a cargarlo si el usuario pincha de nuevo en esa opcion, entonces deberia volver a cargarlo con el loader o simplemente le pondria visible a true.

gracias por la paciencia.

Por Kinetik

8 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 Mar 2009 06:00 pm
He actualizado mi post

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 16 Mar 2009 09:03 pm
Entiendo que ese codigo lo he de poner en la pelicula principal. Asi lo he hecho y cuando llamo desde el swf secundario a la funcion donde he metido el this.removeChildAt(nivel) al publicar el swf me da este error:

1061: Llamada a un método clickMata posiblemente no definido mediante una referencia con tipo estático flash.display:Stage.

he llamado a la funcion de esta forma:

Código :

BotonCerrar.addListener( MouseEvent.CLICK, cerrarlapelicula);

function cerrarlapelicula(e:MouseEvent):void
{
   stage.clickMata();
}


y la funcion clickMata que esta en la pelicula principal:

Código :

function clickMata():void {
trace("llamada desde otro swf");
this.removeChildAt(nivel)
} 

Por Kinetik

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Mar 2009 10:32 am
Si está en lapeli principal, puedes hacer esto

Código ActionScript :

function cerrarlapelicula(e:MouseEvent):void
{
   root.remove(this);
}
//En la principal
function remove(who:DisplayObject):void {
   this.removeChild(who)
} 


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Mar 2009 10:14 pm
:(
Esto:

Código :

function cerrarlapelicula(e:MouseEvent):void 
{ 
   root.remove(this); 
} 

Devuelve este error:

Código :

1061: Llamada a un método remove posiblemente no definido mediante una referencia con tipo estático flash.display:DisplayObject.


¿puede ser que me falte importar alguna clase?

Por Kinetik

8 de clabLevel



 

firefox
Citar            
MensajeEscrito el 17 Mar 2009 10:18 pm
Sip, cuando no trabajas con clases pasa eso. Si el método realmente existe, evita el error de compilación así

root["remove"](this);

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 18 Mar 2009 08:18 am
Muchas Gracias,

finalmente lo hice con el visible = false, lo probe y funciona bien, pero tu ultima respuesta me ha servido para otros problemillas que tenia. Realmente me tenia frito el error ese. Muhas gracias por el soporte.

Saludos.

Por Kinetik

8 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Mar 2009 05:43 am
que tal chicos tengo ese mismo error y segui tus pasos de poner

root["remove"](this);

pero me devolvio este error... llevo horas buscando como resolverloo podrian ayudarme

TypeError: Error #1006: value no es una función.
at uno_fla::MainTimeline/cerrarlapelicula()

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Mar 2009 10:32 am
Entonces el método remove no está

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Abr 2009 07:40 am
¿que tal? espero no estar reviviendo un tema muy viejo, pero ya que estamos hablando de loaders y eso jejejeje.

Bueno supongo que not engo que destacar que soy nuevo en esto de AS3:

tengo una paginita con 4 pestañas cada una es un boton que cambia las propiedad visible de los movieclips, hasta ahi todo bien y de parece a esto:

Código :

var arrayPestanas:Array=new Array(prestana0,prestana1,prestana2,prestana3);
var arrayContenido:Array=new Array(contenido0,contenido1,contenido2,contenido3);

//limpiando el contenido
function limpiarContenido():void {
   for (var i:Number=0; i<arrayContenido.length; i++) {
      arrayContenido[i].visible=false;
   }
}
limpiarContenido();

//la funcion que hace que se muestre el contenido de cada una de las pestañas al hacer click.
function clickBoton(evt:Event):void {
   limpiarContenido();
   var cuenta:Number = arrayPestanas.length;
   var index:Number;
   for(var i:Number=0;i<cuenta;i++){
      if(evt.target.name == arrayPestanas[i].name){
         index = i;
      }
   }
   arrayContenido[index].visible = true;
}
//agrega el listener para cada una de las pestañas y hace que el click se registre en el primer nivel del Movieclip
//(es que estan animadas y tienen otros dentro) 
for (var i:Number=0; i<aButtons.length; i++) {
   arrayPestanas[i].mouseChildren=false;
   arrayPestanas[i].addEventListener(MouseEvent.CLICK,btnClick);
}


Basicamente esa es mi pagina, pero al ver que ya estaba pesando demaciado, decidi hacer el contenido aparte en otros swf y cargarlos... y he aqui el problema, a este punto ya he leido mucho, sobre todo la referencia de AS3, pero un amigo me recomendo este sitio.

Basicamente lo que quiero hacer es un sprite donde se cargue el contenido dependiendo de la pestaña en la que se haga click. espero que me ayuden. un saludo y mucha suerte.

Por alley cat

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Abr 2011 02:44 am
Gracias Jorge una ayuda muy valiosa!! :)

Por diegodiego

0 de clabLevel



 

chrome

 

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