Animaciones (parte 1)

En este vídeo se introduce a lo que es una animación. Slick2D permite trabajar con animaciones de forma muy similar a como se trabaja con spritesheets.

Este curso ha sido marcado como anticuado y no está siendo revisado de forma activa. Es posible que la información pueda estar desactualizada o que los enlaces se hayan roto.

Las animaciones son una pieza fundamental para dar vida y realismo a nuestros juegos en Slip 2D, y para implementarlas utilizamos principalmente Sprite Sheets. Un Sprite Sheet no es más que una imagen que contiene varios fotogramas de una animación dispuestos en una cuadrícula. En Slip 2D, esta es la única forma soportada para animar, ya que no trabaja con GIFs animados. La idea es que, al mostrar cada fotograma en secuencia y a una velocidad adecuada, se crea la ilusión de movimiento fluido.

Para comenzar, tomamos un Sprite Sheet con varias imágenes del personaje caminando. Por ejemplo, si la imagen tiene un ancho total de 252 píxeles y contiene 9 fotogramas, cada uno tendrá un ancho de 28 píxeles (252 dividido entre 9) y un alto fijo, digamos 49 píxeles. Con estos datos, creamos una instancia de la clase SpriteSheet en Slip, que se encargará de manejar la división de la imagen en fotogramas individuales.

Luego, para crear la animación, usamos la clase Animation. Esta clase tiene varios constructores, pero el más práctico es el que recibe un SpriteSheet y la duración de cada fotograma en milisegundos. Por ejemplo, si queremos que cada fotograma dure 100 ms, pasamos ese valor al constructor. Esto hace que la animación avance automáticamente mostrando cada fotograma durante ese tiempo.

SpriteSheet sprite = new SpriteSheet("ruta/a/la/imagen.png", 28, 49);
Animation anim = new Animation(sprite, 100);

Una vez creada la animación, podemos dibujarla en pantalla usando su método draw(x, y), igual que con cualquier objeto que implemente la interfaz Renderable. Para que el personaje se vea bien, es importante ajustar el color de fondo del juego, especialmente si el personaje tiene colores oscuros que podrían confundirse con el fondo.

Un detalle importante es el comportamiento de actualización de la animación. Por defecto, la clase Animation tiene activado el auto-update, lo que significa que cada vez que llamamos a draw(), la animación automáticamente calcula si debe avanzar al siguiente fotograma según el tiempo transcurrido. Si desactivamos esta opción, tendremos que llamar manualmente al método update(delta) para avanzar la animación, donde delta es el tiempo en milisegundos desde la última actualización.

anim.setAutoUpdate(false);
// En el ciclo de juego:
anim.update(delta);
anim.draw(x, y);

Sin embargo, es recomendable no mezclar ambos métodos para evitar que la animación avance demasiado rápido o de forma errática.

En cuanto a la repetición de la animación, por defecto la animación se repite en bucle continuo, es decir, cuando llega al último fotograma vuelve al primero. Esto se controla con el método setLooping(boolean). Si lo desactivamos, la animación se detendrá en el último fotograma.

Además, Slip 2D ofrece un modo llamado ping-pong mediante el método setPingPong(boolean). En este modo, la animación avanza desde el primer fotograma hasta el último y luego regresa hacia atrás, repitiendo este ciclo. Esto crea un efecto de ida y vuelta que puede ser útil para ciertos tipos de animaciones.

Para obtener información sobre la animación en ejecución, la clase Animation dispone de métodos como getFrame() para saber el índice del fotograma actual, y getFrameCount() para conocer el total de fotogramas. También podemos obtener imágenes específicas con getImage(index) o la imagen del fotograma actual con getCurrentFrame(). Esto puede ser útil para dibujar fotogramas estáticos o para depurar el estado de la animación.

int frameActual = anim.getFrame();
int totalFrames = anim.getFrameCount();
Image imagenFrame3 = anim.getImage(3);
Image imagenActual = anim.getCurrentFrame();

Con estas herramientas, podemos controlar con precisión cómo se comportan nuestras animaciones, ajustando la velocidad, la repetición y accediendo a sus fotogramas para crear efectos visuales más complejos.

En próximos pasos, exploraremos métodos adicionales para controlar el flujo de las animaciones, como detenerlas, reiniciarlas y combinarlas para crear personajes y escenarios más dinámicos y realistas.

Lista de reproducción
  1. 1
    Instalando las herramientas Java
    11 minutos
  2. 2
    Instalando Slick2D
    26 minutos
  3. 3
    Estados e imágenes
    23 minutos
  4. 4
    Respuesta de usuario
    24 minutos
  5. 5
    Colisiones
    25 minutos
  6. 6
    Matemáticas y física
    13 minutos
  7. 7
    SpriteSheet
    13 minutos
  8. 8
    Tilemaps básicos
    23 minutos
  9. 9
    Escalas
    11 minutos
  10. 10
    Animaciones (parte 1)
    14 minutos
  11. 11
    Animaciones (parte 2)
    15 minutos
  12. 12
    Radiografía de un estado
    12 minutos
  13. 13
    Mover con el ratón (parte 1)
    11 minutos
  14. 14
    Mover con el ratón (parte 2)
    13 minutos
  15. 15
    Sonido
    13 minutos
  16. 16
    Música
    14 minutos
  17. 17
    Fuentes
    19 minutos
  18. 18
    Instalar Slick en NetBeans
    6 minutos