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.
Por cierto, está bien sistematizarlo en una clase, pero ya que sólo tiene una función, yo la pondría en un archivo .as, que se refiera a MovieClip.prototype y que se acceda a ella con un #include
Código :
Y para utilizarla:
Código :
Por Freaze el 08 de Octubre de 2006
Código :
PD. lo del include# es una opción, pero yo prefiero trabajar con clases...
Por supermac el 09 de Octubre de 2006
Por MorphX el 11 de Octubre de 2006
Gracias Zguillez, has aportado luz a uno de los secretos más oscuros que teniamos con los multiswfs
Código :
zah :
cOOl
Código :
Ahora, me estoy dando cuenta de que así se carga uno los play, stop, gotos y demás. Habría que hacer una clase que extienda a MovieClip, con métodos como _stop o algo así. Maikel me ensñó cómo aquí
Código :
Por t3rzer el 04 de Abril de 2007
Porque yo lo hago con un loadMovie y no me funciona...
Por JkoRn el 07 de Abril de 2008
var carga:MovieClipLoader = new MovieClipLoader();
carga.loadClip("ani1.swf", contenedor1);
carga.loadClip("ani2.swf", contenedor2);
ani1 = new FrameRate(contenedor1, 12);
Por no me funciona el 18 de Abril de 2009
gracias
Saludos =)
gracias.
saludoooos....
CLAnonimo :
gracias.
saludoooos....
Como bien se explica en el tutorial, pues se incluye la clase "FrameRate.as", y para cambiar la velocidad de reproduccion, simplemente en nuestro codigo seleccionariamos a cual movie queremos modificarle la velocidad de reproduccion.
Código :
Saludos y arriba CLab
Por ankoallo1 el 29 de Enero de 2012