Comunidad de diseño web y desarrollo en internet online

unloadMovie en as3

Citar            
MensajeEscrito el 08 Jul 2011 06:15 pm
Hola!!

Les cuento tengo un swf que hago un load de otro asi:

Código ActionScript :

var holder:Loader = new Loader() 
holder.load(new URLRequest("21.swf")) 
addChild(holder)

Ahora dentro de 21.swf hice un boton para cerrar la pelicula que le puse de nombre de instancia "volver".

Y el siguiente codigo:

Código ActionScript :

var _closeEvent:Event = new Event("close", true, false);
volver.addEventListener(MouseEvent.CLICK, dispatchUnload);
 
function dispatchUnload(event:MouseEvent):void {
dispatchEvent(_closeEvent);
} 


pero no me funciona, q estoy haciendo mal?

Gracias :D

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 06:18 pm
Simplemente estás disparando un evento, lo que falta es que alguien lo escuche y que haga holder.unload()
Para eso deberías agregar una precarga, y cuando termine de cargar le agregas un listener a holder.content par que escuche el evento CLOSE

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 06:22 pm
mm entiendo pero estoy un poco perdido en AS3, tendrias un ejemeplo? o te demandaria mucho tiempo?

Gracias desde ya jorge

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 06:24 pm
Arranca con la parte fácil, que es lo de agregar un preloader. Aquí mismo en Cristalab tienes tutoriales sobre preload en AS3, postea a lo que llegues y luego vemos como le agregamos el listener

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 06:26 pm
pero porque debo hacer una precarga? eso lo uso cuando la movie es demasiado pesada, que tiene que ver eso con cerrar un swf? seguramente debes estar refiriendote a otra cosa que desconozco.

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 06:28 pm
Tienes que agregar un listener, si lo haces antes que termine de cargar no funciona, entonces tienes que saber cuando termina de cargar. Puedes si quieres obviar la parte visual, pero tienes que tener un callback para el evento COMPLETE

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 06:35 pm
ahi se lo agregue:

Código ActionScript :

stop() 
var porcentaje:int 
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, precarga) 
function precarga(e:ProgressEvent){ 
   var cargados:Number = e.bytesLoaded 
   var totales:Number = e.bytesTotal 
   porcentaje = cargados*100/totales 
} 
this.loaderInfo.addEventListener(Event.COMPLETE, completado) 
function completado(e:Event):void{ 

   this.play() 

   this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, precarga) 
   this.loaderInfo.removeEventListener(Event.COMPLETE, completado) 
} 


var _closeEvent:Event = new Event("close", true, false);
volver.addEventListener(MouseEvent.CLICK, dispatchUnload);
 
function dispatchUnload(event:MouseEvent):void {
dispatchEvent(_closeEvent);
} 


ahora creo que debo poner el listener? pero no se bien como.

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 06:38 pm
Ok, pero lo copipasteaste en el lugar equivocado. No va en lo que cargas sino en el cargador. Mira donde tienes el Loader, allí es donde lo tienes que poner

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 07:15 pm
uh...q mal...bueno me quedo asi:

Código ActionScript :

stop()  
var porcentaje:int  
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, precarga)  
function precarga(e:ProgressEvent){  
   var cargados:Number = e.bytesLoaded  
   var totales:Number = e.bytesTotal  
   porcentaje = cargados*100/totales  
}  
this.loaderInfo.addEventListener(Event.COMPLETE, completado)  
function completado(e:Event):void{  
 
   this.play()  
 
   this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, precarga)  
   this.loaderInfo.removeEventListener(Event.COMPLETE, completado)  
}  

var holder:Loader = new Loader() 
holder.load(new URLRequest("21.swf")) 
addChild(holder)
stop()

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 07:21 pm
Ok, sin embargo esto no te sirve tal cual porque es de una precarga de si mismo, cambia estas dos líneas que deberían ir al final

Código ActionScript :

holder.loaderInfo.addEventListener(ProgressEvent.PROGRESS, precarga) 
holder.loaderInfo.addEventListener(Event.COMPLETE, completado)   


Luego en la función completado los quitas

Código ActionScript :

   holder.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, precarga)   
   holder.loaderInfo.removeEventListener(Event.COMPLETE, completado)   


Y allí le agregas el listener a holder.content

holder.content.addEventListener(Event.CLOSE, cierra)

En la función cierra haces el holder.unload()

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 07:45 pm
Entiendo un poco mas...me quedo asi:

Código ActionScript :

stop()  
var porcentaje:int  
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, precarga)  
function precarga(e:ProgressEvent){  
   var cargados:Number = e.bytesLoaded  
   var totales:Number = e.bytesTotal  
   porcentaje = cargados*100/totales  
}  
holder.loaderInfo.addEventListener(ProgressEvent.PROGRESS, precarga)  
holder.loaderInfo.addEventListener(Event.COMPLETE, completado)   

function completado(e:Event):void{  
 
   this.play()  
 
holder.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, precarga)       
holder.loaderInfo.removeEventListener(Event.COMPLETE, completado) 

}
holder.content.addEventListener(Event.CLOSE, cierra)

function cierra(e:Event):void{
   holder.unload();
}


var holder:Loader = new Loader() 
holder.load(new URLRequest("21.swf")) 
addChild(holder)
stop()


y me dice al hacer el loader:

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at Sample_fla::Symbol19_31/frame15()

:S

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 07:49 pm
Errores:

- Estás agregando los listeners al holder antes de declararlo
- No quitaste esto> this.loaderInfo.addEventListener(....)
- Estás haciendo el addEventListener al evento close fuera de la función completado

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 07:56 pm
juju ahi me quedo:

Código ActionScript :

var holder:Loader = new Loader() 
holder.load(new URLRequest("21.swf")) 
addChild(holder)
stop()

var porcentaje:int  
function precarga(e:ProgressEvent){  
   var cargados:Number = e.bytesLoaded  
   var totales:Number = e.bytesTotal  
   porcentaje = cargados*100/totales  
}  
holder.loaderInfo.addEventListener(ProgressEvent.PROGRESS, precarga)  
holder.loaderInfo.addEventListener(Event.COMPLETE, completado)   

function completado(e:Event):void{  
 
   this.play()  
 
holder.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, precarga)       
holder.loaderInfo.removeEventListener(Event.COMPLETE, completado) 
holder.content.addEventListener(Event.CLOSE, cierra)

}

function cierra(e:Event):void{
   holder.unload();
}


ahora en el 21.swf donde tengo el boton volver...y el siguiente codigo:

Código ActionScript :

var _closeEvent:Event = new Event("close", true, false); 
volver.addEventListener(MouseEvent.CLICK, dispatchUnload);   
function dispatchUnload(event:MouseEvent):void { 
dispatchEvent(_closeEvent); }


q debo modifcar algo para que funcione y se cierre?

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 08:07 pm
Ahora debería ejecutarse la función cierra, agrega un trace a ver si se ejecuta>

Código ActionScript :

function cierra(e:Event):void{ 
   trace("Llama a cierra !!")
   holder.unload(); 
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 08:21 pm
mm no no se ejecuta.,.! :(

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 08:32 pm
El código de 21.swf está en el timeline principal de la peli?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2011 08:39 pm
si

Por pelao

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 08 Jul 2011 09:07 pm
Prueba agregándose al Loader en vez de al content

holder.addEventListener(Event.CLOSE, cierra)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Jul 2011 12:42 pm
no hace nada :(
estoy buscando x inet aver si encuentro algun ejemplo, pero tampoco :(

grr

gracias igual solisarg!

Por pelao

18 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Jul 2011 01:45 pm
Ok, hay que hacer alguas pruebas, pero puedes llamar directamente a la función si está en root, en vez del dispatchEvent

root.cierra(_closeEvent)

Igual el camino correcto es el que intentas, las llamadas directas se deben evitar porque rompen la encapsulación

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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