¿Quieres registrarte?

Comprobar velocidad correcta de fotogramas en Flash

Por: Zguillez
10 de Diciembre del 2006
7273 de clabLevel
Otros artículos de Zguillez
11,421 visitas

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:


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.

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript

Comentarios | Enviar un comentario
Realmente muy buena idea. Así das una nueva forma de que se personalicen las aplicaciones (no sólo animaciones) según las necesidades de cada usuario. Buen trabajo.

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: Zah
Para visualizar o almacenar una variable del "framerate" con el nº de Fps de un clip:

Código :

Object.prototype.nFps = function() {
   flag == true ? temp=getTimer() : tiempo=int(1000/(getTimer()-temp));
   flag = !flag;
   return tiempo;
}

// LLamada:

Código :

this.onEnterFrame = function() {
   txtvelo = nFps();
}

Por: Teseo
Muy bueno para los animadores! :) Gracias papa Z
Por: Sisco
Lo siento, pero no me funciona :S
Por: nestorrente_blog
¡excelente artículo!
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: RiDaPe_blog

nestorrente_blog :

Lo siento, pero no me funciona :S

¿Qué es lo que no te funciona? ¿Como estás utilizando el código?
Por: Zguillez
A mí tampoco me anda del todo bien ya que haga lo que haga, siempre me salta el trace, y es una pena porque es una buena idea, solo tengo una duda, y es que cuando hace el cálculo del promedio:

Código :

promedio = (tiempo - tiempo_old) / 2;


¿no seria realmente?

Código :

promedio = (tiempo   tiempo_old) / 2;


Si asi fuera, yo ya hice el cambio y ahora, aunque provoco que la animación se relentice, nunca salta el trace.
Por: mussra_blog
Lo siento me comí el

Código :

promedio = (tiempo   tiempo_old) / 2;

Por: mussra_blog
vale, no se por qué no aparece el signo "más" pero en realidad es:
promedio = (tiempo "más" tiempo_old) / 2;
Por: mussra_blog
Hola, me funcionó perfecto!
el tema es q me aparece todo el tiempo REPRODUCCION LENTA :P
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
Por: Rodrigo-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.