Programación Específica > Programación de Videojuegos

 Como Controlo La Velocidad De Animacion?

(1/1)

ibito:
Como le hago para controlar la animacion de un sprite ? lo que pasa es que los sprites se ven demasiado rapido (la animacion), entonces una vez lo que hice fue hacer una funcion playAnimation(animation, time) y lo que hacia era dividir los fps que tenia entre time ( o algo asi la verdad ya no receuerdo), y se veia con ese tiempo pero me dijeron queno era buena idea hacerlo asi  :P


Que manera utilizan ustedes?


de antemano gracias por la respuesta

Enko:

--- Citar ---Que manera utilizan ustedes?

--- Fin de la cita ---
La velocidad de animacíon se controla en toda la escena y no por separado.

<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->

procedimiento  CicloJuego;
variables
TiepoComienzo: Longint; //indicará cuando comenzo la escena
comenzar
 mientras GameRunning hacer
 comenzar
   {se graba el tiempo de comienzo}
   TiempoComienzo = ObtenerTiempoActual;
   {Obtener el estado de las entradas}
   LeerTeclado;
   {realizar los pasos de la inteligencia artificial}
   RealizarInteligenciaArtificial;
   {Actualizar posicion Sprites}
   ActualizarPosicionSprite;
   {Testear Collision}
   CheckearColision;
   {Realizar los sonidos}
   TocarSonidos;
   {Realizar la musica}
   TocarMusica;
   {Finalmente Volcar todo a pantall}
   VolcarPantalla;
   {Determina si el ciclo del juego debe continuar}
   GameRunning = IsGameOver;
   {Esta es la parte que verifica cuanto tiempo paso despues
   del comienzo de la escena, si es menor al debido, la animacion será
   demasiado rapida por lo que hay que detener todo hasta que el tiempo sea
   el adecuado y concida con los FPS buscados}
   si ObtenerTiempoActual-TiempoComienzo < TiempoDeseado(FPS) entonces
   RetenerJuegoHasta(ObtenerTiempoActual-TiempoComienzo);
 fin mientras;
fin procedimiento

{nuestro sprite es así:}
Sprite : objeto
 Imagen: Array[0..5] of Imagen; //son las imagenes del sprite
 AnimCount: integer; // el frame de la  animacion actual
 Frames: integer = 5;
 metodo Dibujar(Donde: PantallaVirtual); //algun procedimiento que dibuja es sprite
fin conjunto

{el procedimieto de UpdateSprite seria asi, tomando en cuent}
procedimiento ActualizarPosicionSprite;
comenzar
 Sprite.Imagen[AnimCount].Dibujar(Buffer);
 Animcount = AnimCount + 1;
 si AnimCount = Frames  entonces AnimCount = 0;
fin procedimiento

 <!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->

Como observas en el pseudo, Ni importa los FPS del sprite, sino los de la escena, me refiero a que la animacion debe ser controlada respecto a todo lo visible en la pantallay no por cada cosa que se ve.

Espero no  ser confuso :lightsabre:


--- Citar ---me dijeron queno era buena idea hacerlo asi

--- Fin de la cita ---
De tu forma, Creas multiples animaciones en la pantalla y controlas su velocidad por separado lo que te complica las cosas.
Segun el pseudo anterior, Debes controlar la pantalla como una única animacion.

ibito:
muchas gracias por la respuesta, creo haber entendido :D

Ruben3d:
Personalmente, prefiero establecer una velocidad en cuadros por segundo independiente para cada uno de los sprites que tenga, para así tener mayor control. Si entras aqui:
io3d/src
puedes ver la implementación que tengo de los sprites animados. En concreto, fijate en los archivos
io3d/src/textures.h
io3d/src/textures.cpp

Puedes ver el método CTexture::getImage(), que retorna el cuadro que corresponda según su velocidad. Este uso te permite simplificar mucho el código del programa que lo maneja.

Un saludo.

Ruben3d

Navegación

[0] Índice de Mensajes

Ir a la versión completa