Comunidad de diseño web y desarrollo en internet online

Error en la simulación de la precarga

Citar            
MensajeEscrito el 02 Feb 2010 06:11 pm
Tengo una animación que consta de dos escenas, en la primera tengo el código del preloader que es este:

Código ActionScript :

stop();

addEventListener(Event.ENTER_FRAME, carregando) ;

function carregando(e:Event):void
{
   var carregados = Math.round(stage.loaderInfo.bytesLoaded);
   var total = Math.round(stage.loaderInfo.bytesTotal);
   var porcentagem:Number = Math.floor ( carregados * 100 / total );
   txtPorcentagem.text = porcentagem.toString() + "%";
   mcBarra.gotoAndPlay( porcentagem );
   if (carregados == total) 
   {
      removeEventListener(Event.ENTER_FRAME, carregando);
      play();
   }
}


y en la segunda mi animación. Cuando doy Ctrl + Enter toda va bien pero cuando hago la simulación de la precarga me está devolviendo este error:

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

La animación es exclusivamente en timeline, no tiene nada de código.

Alguien sabe que está aconteciendo y como resolver este problema? Desde ya muchas gracias. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Feb 2010 02:40 am
Lo que encuentro raro es esto: mcBarra.gotoAndPlay( porcentagem );

Supongo que sera que la barra se vaya agrandando por lo que en vez de eso, tendrias q usar:

Código ActionScript :

 mcBarra.width=porcentagem; 

Lo otro: ¿Tenes agregado un campo de texto dinamico llamado: txtPorcentagem?

fijate si te sirve y avisame. saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

chrome
Citar            
MensajeEscrito el 03 Feb 2010 10:32 am
Esa línea que te parece rara a mi me pareció rarísima. Escribí este código ya hace un tiempo baseandome en uno que tenía de AS2. Pero lo mas raro aún es que lo vengo utilizando siempre, está online en innúmeros sites funcionando bien. No sé como nunca percibí ese error que devuelve en la simulación.

Cambié la línea que me dijiste, la anulé con comentário // y el error persiste. La caja txtPorcentagem existe en el stage y está debidamente instanciada.

Gracias por la ayuda. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Feb 2010 11:47 am
A mi me parece raro esto:

Código ActionScript :

addEventListener(Event.ENTER_FRAME, carregando) ; 


¿A que le agregas el evento?

Yo creo no deberías hacer un loader al Stage sino que deberías hacerlo al Clip que cargas o lo que sea. No es el espiritu de AS3 hacerlo así.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 03 Feb 2010 12:00 pm
Si la verdad que esa linea tb lo es, yo te recomendaria probar con este codigo:

Código ActionScript :


stop();
/**
* Creamos los Eventos
*/
this.addEventListener(Event.ENTER_FRAME, cargar);
function cargar(event:Event):void{
 
/**
* Variable que me dice el total de bytes que voy a cargar
*/
var total:Number = event.currentTarget.loaderInfo.bytesTotal;
 
/**
* Variable que me dice el total de bytes cargados hasta el momento
*/
var loaded:Number = event.currentTarget.loaderInfo.bytesLoaded;
 
/**
* Le digo al campo de texto dinámico que me muestre el porcentaje de lo cargado
*/
porcentaje.text="Cargado: "+int((loaded/total)*100)+ " %"
 
/**
* Cuando lo cargado(loaded) sea igual o mayor al total a cargar (total),
* que vaya al fotograma 2
*/
if (loaded >= total){
this.gotoAndStop(2);
this.removeEventListener(Event.ENTER_FRAME, cargar);
}
}


saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

chrome
Citar            
MensajeEscrito el 03 Feb 2010 12:12 pm
Tenés razón Hernán, el código a continuación está escrito de la forma que vos sugerís

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;
   percent.text = Math.ceil(perc*100).toString();
}

function myLoader_COMPLETE (e:Event):void
{
   removeChildAt(0);
   percent = null;
   addChild(myLoader);
}


y está funcionando sin problemas lo que le falta es la barra, voy a intentar hacerla y si encuentro algún problema vuelvo a postar.

Gracias de nuevo. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Feb 2010 12:27 pm
Amigo Bubudrc me parece que "postamos" al mismo tiempo. Voy a trabajar de la forma que sugirió Hernán que es mas ordenada y correcta.

Pero me acordé ahora el porque de esta línea:

Código ActionScript :

mcBarra.gotoAndPlay( porcentagem );


Esta forma de escribir permite colocar como animación de carga cualquier objeto no siendo necesária una barra. Por ejemplo, hace un tiempo hice un site para una empresa de guinches entonces en la animación de la precarga coloqué uno de esas equipos levantando un objeto que decía: "Cargando...". Para hacer esto simplemente hay que hacer esa animación con un total de 100 frames.

Lo que me está faltando ahora es traducir esto para AS3 cuando termine voy a postar el código completo, caso contrário solicito ayuda nuevamente.

La nimación a la que hice referencia podés verla en esta dirección:

http://www.soferroguindastes.com.br

Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 03 Feb 2010 04:47 pm
Ishkandar ya lo tienes , como dices si tu animacion es de 100 frames y la variable del porcentaje de carga toma rangos de 1 a 100 en lo que se completa la carga , solo hace falta que en el handler del progress hagas mas o menos asi :

Código ActionScript :

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


y por supuesto en el handler complete remueves mcBarra y percent, nota que es gotoAndStop y no gotoAndPlay , gotoAndPlay quitaria la sincronizacion entre los valores actuales de la carga y la animacion.

Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 04 Feb 2010 09:40 am
Jonathan hice lo que decís pero el MovieClip no se "MUEVE", a continuación el código completo

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("definitivo.swf"));

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

function myLoader_COMPLETE (e:Event):void
{
   removeChildAt(0);
   percent = null;
   var target:DisplayObject = this.getChildAt( 0 );
   this.removeChild(target);
   addChild(myLoader);
}

Me parece que no funciona porque el parámetro "percent" del gotoAndStop (intenté tambíen con Play) asume un valor fijo y no va cambiando conforme el percent.text.

Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 04 Feb 2010 04:35 pm
Claudio, como se va mover si le pasas percent un [TextField] a la funcion gotoAndStop() , fijate como modifique la variable "perc", en una sola linea debes sacar el porcentaje de lo que lleva cargado y como es variable es numerica y redondeada se puede pasar al gotoAndStop() , para que no hayga errores haslo asi

Código ActionScript :

function myLoader_PROGRESS(e:ProgressEvent):void
{
   //animacion  de la barra
   var goFrame:Number = Math.ceil((e.bytesLoaded / e.bytesTotal) * 100);
   mcBarra.gotoAndStop(goFrame);

   var perc:Number = e.bytesLoaded / e.bytesTotal;
   percent.text = Math.ceil(perc * 100).toString();

}


Jonathan

Por maneuver

243 de clabLevel



Genero:Masculino  

Mexico City

chrome
Citar            
MensajeEscrito el 04 Feb 2010 05:22 pm
Jonathan tenés razón debo haber estado con mucho sueño para mandar como parámetro el nombre de instancia de la caja de texto.

Ahora está funcionando bien, muchas gracias amigo.

Voy a dejar a continuación el código completo por si alguien desea utilizarlo

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
{
   removeChildAt(0);
   txtPercent = null;
   var target:DisplayObject = this.getChildAt( 0 );
   this.removeChild(target);
   addChild(myLoader);
}












Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Feb 2010 09:21 pm
Estoy notando ahora, viendo esto funcionar on line, que cuando termina la precarga y se inicia la animación propiamente dicha ella no comienza desde el primer frame.

Alguien sabe por que y como corregir eso?. Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 07 Feb 2010 11:28 am
Pensando un poco se me ocurrió esta solución, en la función COMPLETE colocar estas dos líneas:

Código ActionScript :

var mcTarget:MovieClip = MovieClip(myLoader.content);
mcTarget.gotoAndPlay(1);


No sé si existe un solución mejor, como todavía no entiendo la razón de este problema. Si alguien quiere echar un poco de luz sobre este asunto, desde ya muchas gracias.

Claudio

Por Ishkandar

Claber

303 de clabLevel



Genero:Masculino  

firefox

 

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