Este es un código muy sencillo que nos permite comprobar si una animación de nuestra película se está reproduciendo a la velocidad de fotogramas (Frames por segundo) que le hemos indicado o si por el contrario se está reproduciendo a una velocidad inferior.
Hay casos que por una mala optimización de los elementos que estamos utilizando para realizar una animación:
- Estamos moviendo muchos gráficos a la vez
- Los gráficos son excesivamente complejos
- Hacemos interpolaciones con bloques de textos, bitmaps grandes etc..
- etc...
Y al reproducirse la animación parece ralentizarse...
Poniendo este código en la línea de tiempo que contiene la animación, recibiremos un aviso cuando la animación se reproduzca a una velocidad de fotograma inferior a la deseada:
Código :
this.onEnterFrame = function() { var framerate:Number = 30; var tiempoframe:Number = (1 / framerate) * 1000; tiempo_old = (tiempo_old != undefined) ? tiempo : 0; tiempo = getTimer(); promedio = (tiempo - tiempo_old) / 2; if (promedio < tiempoframe) { trace("reproduccion lenta"); } };
El código es muy simple. Únicamente le tenemos que indicar a que velocidad de fotogramas tiene como parámetro nuestra película:
Código :
var framerate:Number = 30;
Calculamos el tiempo que tarda en reproducirse un fotograma ( 1 segundo / num framesporsegundo ) en milisegundos ( * 1000)
Código :
var tiempoframe:Number = (1 / framerate) * 1000;
Por otro lado calculamos cuanto tarda en realidad nuestra película en pasar de un fotograma a otro. Lo hacemos capturando el tiempo con getTimer(). A la vez que capturamos el tiempo en el fotograma actual guardamos en otra variable el registro de la anterior captura.
Código :
tiempo_old = (tiempo_old != undefined) ? tiempo : 0; tiempo = getTimer();
Haciendo un promedio de la captura realizada en el fotograma actual y la realizada en el fotograma anterior podemos saber el tiempo transcurrido entre las dos capturas, y por lo tanto el tiempo real del paso de un fotograma a otro.
Código :
promedio = (tiempo - tiempo_old) / 2;
Ahora compararemos el tiempo real con el tiempo correcto para la velocidad de fotogramas de la película y sabremos si la reproducción es correcta o inferior a lo normal.
Código :
if (promedio > tiempoframe) { trace("reproduccion lenta"); }
Este código nos puede servir para darnos cuenta de que estamos haciendo mal la animación y debemos optimizarla...
O podemos utilizarlo en casos más concretos como podría ser cuando estamos creando animaciones con elementos aleatorios.
Por ejemplo, estamos creando un cielo de estrellas donde las estrellas se crean aleatoriamente y con un numero indefinido. Podemos ir creando clips de estrellas de forma aleatoria controlando la reproducción de la película, en cuanto detectamos que a la película le cuesta reproducirse dejamos de crear estrellas o eliminamos unas cuantas. De manera que optimizamos la película en función de la potencia del ordenador.
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Zah el 10 de Diciembre de 2006
Ahora, para hacerlo realmente efectivo no habría que disparar la función controladora cuando se reprodujo lento UN fotograma (ya que nunca todos se reproducen exactamente a la misma velocidad), si no que debería hacerse un promedio o algo así y actuar en función del porcentaje de desajuste.
Saludos.
Por Teseo el 11 de Diciembre de 2006
Código :
// LLamada:
Código :
Por Sisco el 11 de Diciembre de 2006
Por nestorrente el 11 de Diciembre de 2006
Por RiDaPe el 12 de Diciembre de 2006
me encantan los desarrollos que se adapten lo más posible a la computadora en la que se ejecutan.
Como no pusiste nada de las versiones,y tampoco utiliza palabras clave del otro mundo, me supongo que andara en casi todas, me gusta probar en las 3 últimas versiones que tengo instaladas jeje.
Por Zguillez el 12 de Diciembre de 2006
nestorrente_blog :
¿Qué es lo que no te funciona? ¿Como estás utilizando el código?
Por mussra el 03 de Agosto de 2007
Código :
¿no seria realmente?
Código :
Si asi fuera, yo ya hice el cambio y ahora, aunque provoco que la animación se relentice, nunca salta el trace.
Por mussra el 03 de Agosto de 2007
Código :
Por mussra el 03 de Agosto de 2007
promedio = (tiempo "más" tiempo_old) / 2;
Por Rodrigo el 07 de Diciembre de 2008
el tema es q me aparece todo el tiempo REPRODUCCION LENTA
lo q qisiera saber es si se puede en vez de poner el cartelito de REPRODUCCION LENTA, dar una accion para q se actualice i ande adecuadamente, es decir, a la velocidad en fotogramas q yo puse, ya q esa parte sola se me hace lenta.
espero tu respuesta
muchas graciass