This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Una animación flipbook consiste en una serie de imágenes estáticas que se muestran en sucesión. La técnica es muy similar a la animación tradicional en celuloide (ver http://en.wikipedia.org/wiki/Traditional_animation). La técnica ofrece oportunidades ilimitadas, ya que cada fotograma se puede manipular individualmente. Sin embargo, como cada fotograma se almacena en una imagen única, el consumo de memoria puede ser alto. La fluidez de la animación también depende del número de imágenes que se muestran por segundo, pero aumentar el número de imágenes normalmente también aumenta la cantidad de trabajo. Las animaciones flipbook de Defold se almacenan como imágenes individuales agregadas a un Atlas, o como un Tile Source con todos los fotogramas dispuestos en una secuencia horizontal.

Los sprites y los nodos caja GUI pueden reproducir animaciones flipbook, y tienes mucho control sobre ellas en tiempo de ejecución.
sprite.play_flipbook(). Consulta un ejemplo más abajo.gui.play_flipbook(). Consulta un ejemplo más abajo.El modo de reproducción once ping-pong reproducirá la animación hasta el último fotograma, luego invertirá el orden y reproducirá de vuelta hasta el segundo fotograma de la animación, no hasta el primer fotograma. Esto se hace para que encadenar animaciones sea más fácil.
Supón que tu juego tiene una funcionalidad de “dodge” que permite al jugador presionar un botón específico para esquivar. Has creado cuatro animaciones para apoyar la funcionalidad con retroalimentación visual:
El siguiente script proporciona la lógica:
local function play_idle_animation(self)
if self.dodge then
sprite.play_flipbook("#sprite", hash("dodge_idle"))
else
sprite.play_flipbook("#sprite", hash("idle"))
end
end
function on_input(self, action_id, action)
-- "dodge" es nuestra acción de entrada
if action_id == hash("dodge") then
if action.pressed then
sprite.play_flipbook("#sprite", hash("start_dodge"), play_idle_animation)
-- recuerda que estamos esquivando
self.dodge = true
elseif action.released then
sprite.play_flipbook("#sprite", hash("stop_dodge"), play_idle_animation)
-- ya no estamos esquivando
self.dodge = false
end
end
end
Al seleccionar una animación o imagen para un nodo, en realidad estás asignando la fuente de imagen (atlas o tile source) y la animación predeterminada de una sola vez. La fuente de imagen se define de forma estática en el nodo, pero la animación actual que se reproduce se puede cambiar en tiempo de ejecución. Las imágenes estáticas se tratan como animaciones de un fotograma, por lo que cambiar una imagen en tiempo de ejecución equivale a reproducir una animación flipbook distinta para el nodo:
function init(self)
local character_node = gui.get_node("character")
-- Esto requiere que el nodo tenga una animación predeterminada en el mismo atlas o tile source que
-- la nueva animación/imagen que estamos reproduciendo.
gui.play_flipbook(character_node, "jump_left")
end
Las funciones sprite.play_flipbook() y gui.play_flipbook() admiten una función callback Lua opcional como último argumento. Esta función se llamará cuando la animación haya llegado al final. La función nunca se llama en animaciones en bucle. El callback se puede usar para activar eventos al finalizar una animación o para encadenar varias animaciones. Ejemplos:
local function flipbook_done(self)
msg.post("#", "jump_completed")
end
function init(self)
sprite.play_flipbook("#character", "jump_left", flipbook_done)
end
local function flipbook_done(self)
msg.post("#", "jump_completed")
end
function init(self)
gui.play_flipbook(gui.get_node("character"), "jump_left", flipbook_done)
end