Esto es porque cuando la película se queda en la cache del navegador tarda menos tiempo en cargar que lo que dura tu animación.
Si quieres solucionarlo tienes que usar una variable intermedia que se incremente cuando transcurran X pasadas de la función del intervalo, pero que se incremente si el porcentage de carga es menor que el fotograma actual del intervalo.
Supongo que tu clip de barra_mc tiene 100 fotogramas.
Código PHP:
function cargando() {
if(entrada==undefined)
{
fotograma_preloader=1;
tiempo_fotograma=10;
cuenta_tiempo=0;
entrada=true;
}
var total, cargados, porcentaje;
total = _root.getBytesTotal();
cargados = _root.getBytesLoaded();
porcentaje = Math.ceil((cargados*100)/total);
porcentaje_txt.text = fotograma_preloader+" %";
if(fotograma_preloader<porcentaje)
{
trace(fotograma_preloader);
cuenta_tiempo++;
}
if(cuenta_tiempo==tiempo_fotograma)
{
fotograma_preloader++;
barra_mc.gotoAndStop(fotograma_preloader);
cuenta_tiempo=0;
}
if ((cargados == total) && fotograma_preloader==100)
{
clearInterval(hiloPrecarga);
play();
}
}
var hiloPrecarga = setInterval(cargando, 1);
stop();
Lo que hace es:
a la entrada la funcion definimos:
//actual fotograma de la barra
fotograma_preloader=1;
//tiempo que ha de transcurrir para mostrar otro fotograma
// cuanto menor sea más rápido va (mínimo 2 para que esto tenga sentido)
tiempo_fotograma=10;
//contador de tiempo, vuelve a 0 al llegar a tiempo_fotograma
cuenta_tiempo=0;
//el txt muestra el fotograma de la barra
porcentaje_txt.text = fotograma_preloader+" %";
if(fotograma_preloader<porcentaje)
{
// si el porcentage de carga es mayor que el fotograma actual incrementamos
cuenta_tiempo++;
}
if(cuenta_tiempo==tiempo_fotograma)
{
// si el tiempo para incrementar un fotograma ha transcurrido lo incrementamos
fotograma_preloader++;
//vamos al fotograma que corresponda
barra_mc.gotoAndStop(fotograma_preloader);
//reiniciamos contador
cuenta_tiempo=0;
}
Lo mismo te parece un poco complicado :S
Un saludo.