Comunidad de diseño web y desarrollo en internet online

Comprobar velocidad correcta de fotogramas en Flash

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.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate