Vamos a armar una animación utilizando Sprites. Que es un Sprite?, simplemente una imagen con distintos estados de un objeto en el cual mostrar de a uno y en orden se ve el objeto animado. Es decir, vamos “cortando” la imagen con cada objeto y al mostrar y ocultar en un muy corto tiempo se genera una animación.
Para el caso de este ejemplo me descargué un Sprite del ActionDoom desde acá, que luego organicé un poco para que me sea mas simple manejarlo desde el javascript, quedando en lo siguiente:
Seccionando el sprite
Para poder usarlo desde javascript, tenemos que pensar en una grilla virtual, lo que podemos traducir a una matriz de posiciones, mientras que cada celda tenga el mismo ancho y alto:
Ahora que tenemos nuestra grilla imaginaria, vamos a definir que celdas corresponden a cada estado, en este caso la separe que colores para que sea visible, siendo:
Libre
Acción
Recarga
Todo listo, ahora armemos la matriz de referencia y animaciones en el código:
Como se puede ver, hay celdas que se repiten y es la idea, es común que usemos una “celda” varias veces en la misma animación.
Animando en el Game Loop
La animación se produce sola, simplemente por cada paso del game loop (actualizar y dibujar), actualizamos las coordenadas en la imagen, borramos lo que hay y dibujamos uno nuevo.
Lo que hacemos primero es dejar el game loop corriendo, cuando el usuario presiona una tecla, guardamos que arma seleccionó y su estado:
En la próxima corrida del actualizar en el game loop, nos fijamos cual es el arma y su estado actual, para actualizar la posición de la matriz:
Por último al dispararse el dibujar, utilizamos el drawImage de canvas, pero con unas cuantas opciones mas para poder dibujar sólo la “celda” del estado y arma que queremos:
Para información sobre el drawImage, está muy bien explicado acá