Trataré de ser lo más claro posible con mi problema empezando por describir lo que deseo lograr:
Debo mostrar una imagen gif de un "preloader" antes de cargar una animación en SWF, de la cual no tengo los fuentes ni puedo manipular de manera alguna; es decir, debo esperar hasta que la animación se cargue completamente en el cliente para sustituir la imagen por el SWF.
Algunos SWF tiene un "preloader" incorporado, pero otros no. Los que no poseen "preloader", y son algo pesados me muestran un fondo blanco que no desaparece hasta que se carga totalmente la animación. Lo cual da la sensación al usuario final de que algo no esta funcionando bien; o da la posibilidad de que por tiempo de espera el usuario abandone la página.
Para cargar la animación estoy usan SWFObject, también he probado con Flash Satay. Y en ambos casos obtengo el mismo resultado: me muestra la animación SWF antes de que sea totalmente cargada.
El ejemplo lo pueden ver en http://www.adondejuegos.com/accion/sonic?acc=jugar#a_jugar donde el swf pesa más de un mega .
Entre las soluciones que probé y no funcionaron están (disculpen las barbaridades):
- Colocar a la capa contenedora de la animación una imagen animada de fondo (preloader.gif), y estableciendo el parámetro wmode a transparent. Funcionaba en algunos casos y en otros no.
- Usando Flash Satay con un preloader.swf que llamara al swf principal en cuestión. Pero inmediatamente me cargaba la otra pelicula. Usaba en ActionScript _root.loadMovie(_root.pelicula) donde película era una variable que contenía por ejemplo: principal.swf. No se casi nada de flash :$ así que no profundice mucho en esa solución, salvo algunos ejemplos que vi. Pero me gustaría saber si por ActionScript puedo hacer que la animación llamada no se muestre hasta que cargue totalmente en el cliente.
- Calcular la velocidad de conexión del cliente y mediante una formula calcula el tiempo de descarga del archivo. Lo tenia como idea... pero no creo que sea muy conveniente hacerlo, lo haría cada vez que se solicite la animación sin comprobar si esta ya esta en cache :S.
Toda ayuda es bienvenida :D
A ver si entendi
Antes que todo , te digo que deje de programar en Action Script el anio pasado.
Suponiendo que tienes el swf. y lo importas como escena en el segundo fotograma clave.
Tienes la pelicula principal con 2 capas y 2 fotogramas cada una ... entonces, en el primer fotograma de la primera capa tienes la escena que quieres mostrar como preload ... en el evento onClipEvent (enterFrame) de esta primera escena insertas como accion lo siguiente
onClipEvent (enterFrame) {
_parent.datos_totales = _parent.getBytesTotal(); // el peso total del archivo
_parent.datos_cargados = _parent.getBytesLoaded();
_parent.porcentaje = Math.round(_parent.datos_cargados*100/_parent.datos_totales) add " %";
var porc_cargado=_parent.porcentaje;
if (_parent.porcentaje == "100 %") {
_parent.gotoAndStop(2);
}
}
Se ve facil.
- onClipEvent (enterFrame) : evento mientras se esta cargando
- _parent.datos_totales = _parent.getBytesTotal(); : guardo en la variable los bytes totales de la animacion
- Luego es obvio voy recogiendo los datos cargados hasta el momento y voy mostrando el porcentage, antes de ir al fotograma 2, donde se encuentra la pelicula que tu quieres mostrar.
* Importantisimo
Asegurate de Hacer Stop(); en el primer fotograma de la segunda capa, para que se detenga alli hasta que se cargue todo y recien pase al segundo fotograma cuando termina de cargar.
* Importantisimo tambien
En el primer fotograma de la primera capa, esta la escena que contiene tu imagen. En el caso de este ejemplo, deverias definir un campo de texto llamado 'porc_cargado', que reciba los porcentages y los muestre.
Espero sirva, yo tengo aun los archivos a solicitud
Enjoy.
Miguel
Gracias Miguel... veré como
Gracias Miguel... veré como me las ingenio para implementarlo, ActionScript (Flash en general) no es mi fuerte. Me tocará "googlear" XD
-----------------------------------------
William Wong Garay
Un podcast para desarrolladores web