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
Un’animazione flipbook consiste in una serie di immagini fisse mostrate in successione. La tecnica è molto simile all’animazione tradizionale su cel (vedi http://en.wikipedia.org/wiki/Traditional_animation). Offre possibilità illimitate, perché ogni frame può essere modificato singolarmente. Tuttavia, memorizzare molte immagini distinte può richiedere molta memoria per le texture. La fluidità dell’animazione dipende anche dal numero di immagini mostrate ogni secondo, ma aumentarne il numero solitamente aumenta anche il lavoro necessario. Le animazioni flipbook di Defold vengono memorizzate come singole immagini aggiunte a un atlas oppure come tile in una sorgente di tile. Le animazioni delle sorgenti di tile usano un elenco Frames per selezionare i tile dalla griglia dell’immagine in qualsiasi ordine, comprese le ripetizioni.

Gli sprite e i nodi box della GUI possono riprodurre animazioni flipbook e offrono ampie possibilità di controllo durante l’esecuzione.
sprite.play_flipbook(). Trovi un esempio più avanti.gui.play_flipbook(). Trovi un esempio più avanti.La modalità di riproduzione Once Ping Pong riproduce l’animazione fino all’ultimo fotogramma, quindi inverte l’ordine e la riproduce a ritroso fino al secondo fotogramma dell’animazione, senza tornare al primo. Questo comportamento semplifica la concatenazione delle animazioni.
Supponiamo che il tuo gioco abbia una funzionalità “dodge” che permette al giocatore di schivare premendo un pulsante specifico. Hai creato quattro animazioni per rappresentare visivamente questa funzionalità:
Lo script seguente implementa la logica:
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" is our input action
if action_id == hash("dodge") then
if action.pressed then
sprite.play_flipbook("#sprite", hash("start_dodge"), play_idle_animation)
-- remember that we are dodging
self.dodge = true
elseif action.released then
sprite.play_flipbook("#sprite", hash("stop_dodge"), play_idle_animation)
-- we are not dodging anymore
self.dodge = false
end
end
end
Quando selezioni un’animazione o un’immagine per un nodo, assegni in realtà la sorgente delle immagini (atlas o sorgente di tile) e l’animazione predefinita in un’unica operazione. La sorgente delle immagini è impostata staticamente nel nodo, ma l’animazione da riprodurre può essere cambiata durante l’esecuzione. Le immagini statiche sono trattate come animazioni di un solo fotogramma, quindi cambiare un’immagine durante l’esecuzione equivale a riprodurre un’animazione flipbook diversa per il nodo:
function init(self)
local character_node = gui.get_node("character")
-- This requires that the node has a default animation in the same atlas or tile source as
-- the new animation/image we're playing.
gui.play_flipbook(character_node, "jump_left")
end
Le funzioni sprite.play_flipbook() e gui.play_flipbook() accettano come ultimo argomento una funzione di callback Lua facoltativa. Questa funzione viene chiamata quando l’animazione è stata riprodotta fino alla fine. Non viene mai chiamata per le animazioni cicliche. La callback può essere usata per attivare eventi al termine dell’animazione o per concatenare più animazioni. Esempi:
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