Cómo cargar animaciones

Una animación es una serie de imágenes que se muestran una después de la otra a una velocidad suficiente para dar la apariencia de movimiento.

La función loadAni tiene tres modos diferentes: secuencia, lista y hoja de sprites.

En este mini ejemplo, la animación de la nube respirando se carga utilizando una secuencia numerada de imágenes dada la ruta a la primera imagen y el índice de la última imagen en la secuencia.

La función animation es similar a la función image de p5.js. Úsala en la función draw de p5.js para mostrar una animación en una posición.

En este mini ejemplo, la función loadAnimation recibe una lista de imágenes.

La propiedad ani.frameDelay define cuántos frames se muestra una imagen en la animación antes de que se muestre la siguiente imagen. El valor predeterminado es 4. Los valores más altos hacen que la animación se reproduzca más lentamente. Un retraso de frame de 1 haría que la animación se reproduzca lo más rápido posible.

¡Pruébalo! Intenta cambiar el frameDelay en este mini-ejemplo.

Una hoja de sprites es una sola imagen que contiene todos los fotogramas de una animación. ani.spriteSheet se muestra en el boceto para que puedas ver cómo es.

En el modo de hoja de sprites, loadAni acepta un "atlas" objeto JS que especifica el tamaño de cada fotograma y cuántos fotogramas de animación hay.

Esta forma sencilla de cargar animaciones requiere que cada fotograma en tu hoja de sprites sea del mismo tamaño, esté alineado en una cuadrícula y en orden de izquierda a derecha, de arriba a abajo.

Si deseas que una animación solo use fotogramas específicos de la hoja de sprites, establece la propiedad "frames" del objeto atlas a un arreglo de índices de fotogramas.

Otra forma de usar loadAni en modo de hoja de sprites es proporcionar un arreglo de localizadores de fotogramas, arreglos que especifican la posición y tamaño de un fotograma.

Al crear hojas de sprites, considera la compensación entre la eficiencia del espacio de imagen obtenida al empaquetar estrechamente fotogramas de tamaños irregulares, versus la facilidad de cargar una hoja de sprites alineada en cuadrícula.

Ten en cuenta que las animaciones en estos ejemplos se están cargando de forma diferida en setup. Si realmente necesitas usar una animación cuando tu programa comienza, cárgala en la función preload de q5.js en su lugar.

Animando

p5play te da control total sobre tus animaciones.

¡Intenta usar tu teclado para probar algunas de las diferentes formas de controlar las animaciones!

Sprites con Animaciones

La función sprite.addAni puede agregar una animación a un sprite. También puede cargar la animación, al igual que loadAni. Como un primer parámetro de entrada opcional, puedes proporcionar un nombre para la animación.

Intenta presionar el botón izquierdo del ratón. Cuando la propiedad sprite.debug está configurada como verdadera, puedes ver el colisionador del cuerpo físico del sprite.

Control de la Animación de un Sprite

Utiliza la función sprite.changeAni para cambiar la animación de un sprite. Esta función acepta un objeto de animación o el nombre de una animación cargada previamente.

sprite.ani almacena la animación actual del sprite, lo que permite acceder a sus propiedades y funciones como play y stop.

El vector sprite.mirror se puede usar para voltear el sprite horizontal o verticalmente.

Prueba presionando izquierda y derecha para hacer que el fantasma se mueva.

Prueba presionando la barra espaciadora para detener la animación.

Grupos con Animaciones

Si se agrega una animación a un grupo, los nuevos sprites del grupo recibirán una copia de esa animación.

Ten en cuenta que en este mini-ejemplo, si colocas las manchas demasiado cerca, se separarán hasta que sus colisionadores ya no se superpongan. El tamaño del colisionador se toma del tamaño de la animación.

¡Prueba hacer clic con el ratón para agregar nuevas manchas!

Hojas de Sprites con Múltiples Animaciones

Para cargar múltiples animaciones desde la misma imagen de hoja de sprites, primero establece la propiedad spriteSheet del sprite o grupo.

Luego, utiliza la función addAnimations / addAnis. Aceptan un objeto que utiliza los nombres de las animaciones como claves y los atlas de la hoja de sprites como valores.

Usar un objeto atlas es mucho más fácil que especificar manualmente las coordenadas de cada fotograma.

Los objetos atlas pueden tener las siguientes propiedades:

x, y, pos, w/width, h/height, size/frameSize, row, col, frames/frameCount, delay/frameDelay y rotation.

En el ejemplo del "héroe", el tamaño del sprite del héroe se establece en 32x32 píxeles en el constructor Sprite. Ese tamaño se utiliza como un multiplicador para el valor de la fila proporcionado.

Haz clic en este enlace para ver la hoja de sprites completa questKid utilizada en el ejemplo.

Si deseas apreciar realmente lo bueno que es p5play, compara el código de mi ejemplo con esta demostración de Phaser. ¡Ja!

Recomiendo hacer que cada fotograma de una animación tenga el mismo tamaño y colocarlos en orden de izquierda a derecha. De lo contrario, tendrás que especificar manualmente la posición de cada fotograma, lo que se puede hacer utilizando una matriz de coordenadas en lugar de un objeto atlas.

anis

Cada sprite y grupo tiene un objeto animations / anis que almacena sus animaciones. Las claves son nombres de animaciones y los valores son objetos de animación. Funciona como lo hacen los grupos, utilizando una herencia suave y dinámica.

La propiedad ani.offset se utiliza para ajustar la posición de una animación en relación con la posición del sprite.

Cuando sprite.pixelPerfect está configurado en true, el sprite se dibujará en coordenadas enteras, manteniendo la posición precisa de su colisionador. ¡Esto es útil para juegos de arte pixelado!

Secuenciación de Animaciones

sprite.changeAni puede aceptar un objeto de animación, un nombre de animación o una matriz de nombres de animación que se reproducirán en secuencia.

De manera predeterminada, si la repetición está habilitada, la última animación de la secuencia se repetirá. Para repetir toda la secuencia, utiliza '**' como el último nombre de animación. Si, en cambio, deseas que la secuencia se detenga al final, utiliza ';;' como el último nombre de animación.

¡Este ejemplo muestra cómo el personaje héroe puede moverse por la pantalla usando las teclas WASD o las teclas de flecha!

Secuenciación de Animaciones Avanzada

sprite.changeAni es una función asíncrona, puedes usarla para esperar a que las animaciones terminen de reproducirse. Es particularmente útil para secuencias de animación programadas para NPCs.

En este ejemplo, el personaje héroe está practicando sus habilidades con la espada.

Página anterior Siguiente página