Tuve el mismo problema hace un tiempo, y después de batallar varias horas me di cuenta que las funciones getBytesLoaded() y getBytesTotal() trabajan mucho mejor si los kb's finales son a causa de una o más timelines con tweens definidos o elementos de cierto peso dentro del stage, colocados directamente en este (por ejemplo, un bitmap arrastrado de la libreria).
Por otro lado, si el peso del swf se genera principalmente con fuentes embuidas en textos dinámicos o decenas de líneas de código (donde pueden existir movie clips o archivos externos anexados a través de
attachMovie() o
loadMovie() ), las funciones getBytesLoaded() y getBytesTotal() emplearán más tiempo en leer el código y detectar objetos que puedan afectar el tamaño de la película. Mientras esto ocurre, el player no procesa aún la visualización de ningún objeto, sin embargo la película
ya se está cargando.
Como es obvio, la barra de progreso es un elemento más dentro de la película. Considerando lo anterior, el swf lleva ya cierto porcentaje cargado cuando al fin el player visualiza la barra de progreso, y es por esto que aparece marcando 50% o 60% (mi preloader aparecía marcando 96%, ja, dichoso cargador inservible
).
No se cuál es el contenido de tu película, pero es probable que una situación similar esté ocurriendo. La solución es quitar el cargador de tu swf principal y hacer un nuevo swf cuyo único contendio sea dicho preloader. En este tendrás un movieclip donde cargarás tu swf principal (ahora convertido en una sóla unidad externa, y no en un complejo conjunto de código y objetos). Una vez que esté cargado al 100%, haces un loadMovie de la misma película, pero esta vez pones a _root como target y listo:
Código:
_root.createEmptyMovieClip("aquisecargaelswfprincipal", 1);
aquisecargaelswfprincipal._alpha = 0;
aquisecargaelswfprincipal.loadMovie("pelicula_principal.swf");
this.onEnterFrame = function(){
var total = aquisecargaelswfprincipal.getBytesTotal();
var van = aquisecargaelswfprincipal.getBytesLoaded();
var porcentaje = Math.round((van/total)*100);
texto_referencia.text = "Cargando: "+ porcentaje +"%";
barra_progreso._xscale = porcentaje;
if(porcentaje == 100){
delete this.onEnterFrame;
_root.loadMovie("pelicula_principal.swf");
}
}