Comunidad de diseño web y desarrollo en internet online

Sincronizar peliculas a diferente velocidad de fotogramas

Cuando cargamos una pelicula externa dentro de una pelicula principal, la velocidad de fotogramas de la pelicula cargada se adapta a la velocidad de la pelicula principal, y esto nos dará problemas de sincronización si estamos importando pelicuals a diferentes velocidades.

Supongamos que tenemos esta animación:



Esta animación tiene una velocidad de 12 fotogramas por segundo y una duración de 200 fotogramas.

Esta misma animación la podríamos haber conseguido a 24 fotogramas por segundo y 400 fotogramas de duración.



Si visualizamos estas dos animaciones por separado parecen tener la misma velocidad.

El problema nos vendrá si queremos colocar estas dos animaciones dentro de una misma pelicula. Por ejemplo, colocamos estas dos peliculas dentro de una pelicula a 24 fotogramas por segundo.



La pelicula de 12 fotogramas por segundo pasa a tener la velocidad de 24 fotogramas por segundo de la pelicula principal, pero mantiene su duracion que es de 200 fotogramas, con lo que parece tener el doble de velocidad...

Esto lo podemos solucionar con una clase que permita modificar la velocidad de fotogramas de un MovieClip concreto:

Código :

class FrameRate extends MovieClip {
   function FrameRate(clip, fps) {
      clip.stop();
      if (clip.__fpsInt__ != undefined) {
         clearInterval(clip.__fpsInt__);
         delete clip.__fpsInt__;
      }
      clip.__nextFrame__ = function(ptr) {
         if (ptr._currentframe < ptr._totalframes) {
            ptr.nextFrame();
         } else {
            ptr.gotoAndStop(1);
         }
         updateAfterEvent();
      };
      clip.__fpsInt__ = setInterval(clip.__nextFrame__, Math.round(1000 / fps), clip);
   }
}

Este código lo copiaremos y pegaremos dentro de un archivo de código y lo llamaremos "FrameRate.as" (respetando las mayúsculas)

Y cambiaremos el FrameRate del clip que contiene la animación de 12 fotogramas por segundo de la siguiente manera:

Código :

var carga:MovieClipLoader = new MovieClipLoader();
carga.loadClip("ani1.swf", contenedor1);
carga.loadClip("ani2.swf", contenedor2);
ani1 = new FrameRate(contenedor1, 12); 

El resultado es que la animación mantiene la velocidad de fotogramas original.

¿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