Comunidad de diseño web y desarrollo en internet online

Preloader II

Citar            
MensajeEscrito el 14 Mar 2010 04:00 pm
El preloader que coloco a continuación está funcionando cuando carga objetos swf que tienen una animación en la Timeline

Código ActionScript :

var myLoader:Loader = new Loader();
myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, myLoader_PROGRESS);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myLoader_COMPLETE);
myLoader.load(new URLRequest("index.swf"));

function myLoader_PROGRESS (e:ProgressEvent):void
{
   var perc:Number = e.bytesLoaded / e.bytesTotal;
   txtPercent.text = Math.ceil(perc*100).toString()+"%";
    var goFrame:Number = Math.ceil(perc * 100); 
    mcBarra.gotoAndStop(goFrame); 
}

function myLoader_COMPLETE (e:Event):void
{
   var mcTarget:MovieClip = MovieClip(myLoader.content);//Para enviar la película cargada al frame 1
   removeChildAt(0);//Remueve el txtPercent
   txtPercent = null;//No se
   var target:DisplayObject = this.getChildAt( 0 );//Para remover el mc mcBarra
   this.removeChild(target); //Remueve el mc mcBarra
   mcTarget.gotoAndPlay(1); //Envia la película caregado al frame 1
   addChild(myLoader); //Coloca la película cargada en el palco
}


Pero ahora estoy cargando un sitio que fue desenvolvido totalmente via código en un único frame y me suelta, al finalizar la precarga, mi viejo y odiado error

Error #1009: No es posible accesar una propiedad o un método de una referencia de objeto nula.

Alguien sabe cómo slucionar esto?. desde ya muchas gracias.

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Mar 2010 02:01 am
una solucion es mueve ese frame donde esta el codigo Main a por ejemplo el 2 frame con su correspondiente stop() , y en el frame 1 pones el codigo que usas para la precargar en el COMPLETE despues de haver removido preloader, textos etc haces un nextFrame o gotoAndStop(2) etc.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 15 Mar 2010 08:02 am
Estoy "casi-seguro" que es el mismo problema que le ocurría a Camiso en este post
Pero, en tu caso, lo más sencillo es, en vez de añadir el loader en la función myloader_COMPLETE, añadirlo al principio

Código ActionScript :

var myLoader:Loader = new Loader(); 
myLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, myLoader_PROGRESS); 
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myLoader_COMPLETE); 
myLoader.load(new URLRequest("index.swf")); 
//Lo añadimos aquí directamente
addChild(myLoader); //Coloca la película cargada en el palco 
 .....
//en tu función myLoader_COMPLETE 
function myLoader_COMPLETE (e:Event):void 
{ 
   var mcTarget:MovieClip = MovieClip(myLoader.content);//Para enviar la película cargada al frame 1 
   removeChildAt(0);//Remueve el txtPercent 
   txtPercent = null;//No se 
    //¡OJO! para quitar el mcBarra simplemente
   this.removeChild(mcBarra); //Remueve el mc mcBarra 
   mcTarget.gotoAndPlay(1); //Envia la película caregado al frame 1 
   //-----> addChild(myLoader); //<-----quitamos esta línea
} 

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Mar 2010 01:21 pm
Amigo, funcionó perfectamente pero dejame que te haga una pregunta

la línea

Código ActionScript :

txtPercent = null;


qué es lo que hace? Sería equivlaente a esto?

Código ActionScript :

txtPercent.text = "";


O sea, anular el texto?

Muchas gracias. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Mar 2010 02:51 pm
cuando igualas a null un objeto lo que haces es destruirlo , en este caso se va al fuck el textField , ahora lo de poner en "" la propiedad text lo que haces es limpiar cualquier caracter que este tenia, pero sigue existiendo el objeto textField.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

firefox
Citar            
MensajeEscrito el 15 Mar 2010 02:52 pm
Claudio, simplemente hice un corta y pega de tu código.
No, no es lo mismo. En el primer lugar estamos quitando TODA referencia a la caja de texto, en el segundo estamos igualando el texto a "" (vamos, a la cadena vacía).
Te comento brevemente. En AS.3 lo que tenemos siempre son "variables que hacen referencia a MCs". Sí, ahora el nombre de instancia de algo que tengamos flash lo "traduce" como "una variable que hace referencia a". El único modo de eliminar una variable es

Código ActionScript :

nombre_de_variable=null
//ó
delete nombre_de_variable

Eso hace que la variable "desaparezca" de la memoria. Luego será el Garbage Collection (que es un mecanismo de Flash que, cuando se necesita más memoria, checkea variables que no se usan para poder liberarla o, si no puede liberar suficiente aumenta la memoria que usa) el encargado de que desaparezca definitivamente. Realmente no se gana mucho con eliminar una variable (ocupan 2 bytes) y no tiene demasiado sentido so pena que estemos hablando de muchas variables.

En tu caso al hacer el this.removeChild(mcBarra); (que supongo es donde está tu caja de texto) no hace nada realmente.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 15 Mar 2010 04:19 pm
Entendi, gracias por ambas respuestas.

La caja de texto no está dentro del mcBarra, pero ahora que lo dices tal vez sería interesante colocarla adentro.

Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox

 

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