-Supongamos que creamos , por ejemplo, una animacion de un personaje corriendo
-Supongamos que tenemos mucho dinero y tenemos 3 pcs
-Probamos la animación en 3 pcs al mismo tiempo con las 3 pantallas enfrente nuestro mostrando la animacion.
-Las 3 pcs tienen caracteristicas de hardware completamente diferentes , una es una Pentium II, otra es una Pentuim III y otra una Pentium IIII (no voy a entrar en detalles tecnicos de harware por que no viene al caso, no soy un geek) la cosa es, que una es muy lenta, la otra intermedio y la otra es de las pcs mas nuevas.
Si bien la animacion que veremos en cada pantalla es la misma animacion, veremos que en la pentium 2 el personaje corre muy lento, casi que camina, como si estubieramos reproduciendo la animacion en camara lenta , por que carga menos fotogramas, la PIII veremos al personaje corriendo a la velocidad que necesitamos que corra, y en la PIIII lo veremos corriendo mucho mas rapido de lo que esperabamos por que el hardware carga muchos mas fotogramas.
Esto en flash es normal y mas de uno habra notado como se pone en camara lenta una animacion, si mientras la vemos instalamos el GTA 4 (que no salio para pc todavia....inaginense entonces)
Esto puede dar muchos problemas por ejemplo a la hora de coordinar sonidos, coordinar posiciones entre jugadores de un juego multijugador de acción, o cuando un juego esta programado con mucha meticulosidad, haciendolo funcionar en otro pc nos podemos encontrar con un desastre, (si el personaje avanza en camara lenta en una PII, es mas facil en esa pc saltar los presipicios que en la PIIII)
Espero que haya quedado claro el problema por que mucha gente no lo entiende, lo postie en este foro cuando no tenia la respuesta y nadie lo entendio.
Pues aqui mi aporte, la solucion al problema:
Lo que haremos es que en vez de que la animacion funcione en camara lenta en la PII, haremos que funcione entrecortada, es decir que se excluyan fotogramas pero que el personaje corra a la misma velocidad en todas las 3 pcs, aunque en la PII se vea entrecortado, para eso utilizaremos un script de "Time based motion".
Voy a poner el script para as3 y para as2 , el de as2 lo voy a poner con un SetInterval y el de as3 lo voy a poner con un EnterFrame, pero no hay ninguna diferencia, pueden hacerlo alrevez si quieren, el bucle que se utilize es indiferente.
AS3:
Código :
var oldTime:int = getTimer(); addEventListener(Event.ENTER_FRAME, moveCircle); function moveCircle(event:Event):void { var interval:int = getTimer() - oldTime; oldTime += interval; circulo1.x += interval * 0.5; circulo2.x -= interval * 0.3; }
Hagan 2 clips uno con instancia "circulo1" y otro "circulo2", para modificar la velocidad de movimiento modifican el valor que pone "0.5" o en el caso de circulo2 "0.3"
En las opciones de la pelicula bajen los fotogramas a 10 fps y podran ver como aunque la animacion valla lenta la velocidad de los circulos es la misma.
Aqui se los paso para As2 con el bucle SetInterval
Código :
var oldTime = getTimer(); setInterval(moveCircle, 10) function moveCircle(){ var interval = getTimer() - oldTime; oldTime += interval; circulo1._x += interval * 0.5; circulo2._x -= interval * 0.3; }
Eso es todo, esta hecha de manera que pueden modificar facilmente un codigo que ya tengan armado, no requiere que modifiquen demasiado.
Yo creo que todo buen juego en flash debería tener las animaciones de esta manera, un saludo.