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 statiche mostrate in successione. La tecnica è molto simile all’animazione tradizionale su fogli di acetato (vedi http://en.wikipedia.org/wiki/Traditional_animation). Offre possibilità illimitate, poiché ogni fotogramma può essere modificato singolarmente. Tuttavia, dato che ogni fotogramma è memorizzato in un’immagine distinta, l’occupazione di memoria può essere elevata. La fluidità dell’animazione dipende anche dal numero di immagini mostrate ogni secondo, ma aumentare il numero di immagini comporta in genere anche un aumento del lavoro necessario. In Defold le animazioni flipbook sono memorizzate come immagini singole aggiunte a un atlas, oppure come una sorgente di tile con tutti i fotogrammi disposti in una sequenza orizzontale.

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