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!
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!
Hoja de Imágenes de Sprite
Algunas hojas de sprite contienen una colección de imágenes (subtexturas) empaquetadas en un solo
archivo. Esto permite que se carguen con una sola solicitud de red, reduciendo el tiempo de carga y
mejorando el rendimiento.
Echa un vistazo a la hoja de sprites de
tráfico del Paquete de
VehÃculos Pixelados de Kenny.
En p5play, cada subtextura se puede cargar como una animación de un solo fotograma.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”×”
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Atlas de Texturas XML
Un atlas de texturas describe el tamaño y la posición de cada subtextura dentro de una hoja de
sprites compacta. Por ejemplo, consulta el atlas de texturas de tráfico.
Usa parseTextureAtlas
para analizar un atlas de texturas XML y convertirlo en un
objeto que se puede usar con addAnis
.
Cortar Fotogramas
Cuando se dibujan secciones de una hoja de sprites de pixel art (baja resolución) en el lienzo,
pueden aparecer artefactos en los bordes.
En este ejemplo, observa cómo los bordes contienen partes de otros vehÃculos.
Configura anis.cutFrames
en true antes de cargar animaciones para que p5play corte
la imagen de la hoja de sprites en imágenes separadas
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.