Manuals
Manuals




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

Animazione flipbook

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.

Foglio dell'animazione Ciclo di corsa

Riproduzione delle animazioni flipbook

Gli sprite e i nodi box della GUI possono riprodurre animazioni flipbook e offrono ampie possibilità di controllo durante l’esecuzione.

Sprite
Per riprodurre un’animazione durante l’esecuzione, usa la funzione sprite.play_flipbook(). Trovi un esempio più avanti.
Nodi box della GUI
Per riprodurre un’animazione durante l’esecuzione, usa la funzione 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.

Esempio con uno sprite

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à:

“idle”
Un’animazione ciclica del personaggio del giocatore fermo.
“dodge_idle”
Un’animazione ciclica del personaggio del giocatore fermo in posizione di schivata.
“start_dodge”
Un’animazione di transizione, riprodotta una sola volta, che porta il personaggio del giocatore dalla posizione eretta a quella di schivata.
“stop_dodge”
Un’animazione di transizione, riprodotta una sola volta, che riporta il personaggio del giocatore dalla posizione di schivata a quella eretta.

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

Esempio con un nodo box della GUI

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

Callback di completamento

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