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 q5.js. 脷sala en la funci贸n draw de q5.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.scale 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