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
Une animation image par image (flipbook) se compose d’une série d’images fixes affichées successivement. Cette technique est très proche de l’animation traditionnelle sur celluloïd (voir http://en.wikipedia.org/wiki/Traditional_animation). Elle offre des possibilités illimitées puisque chaque image peut être modifiée individuellement. Cependant, comme chaque image est stockée séparément, l’empreinte mémoire peut être importante. La fluidité de l’animation dépend également du nombre d’images affichées par seconde, mais augmenter ce nombre augmente généralement aussi la quantité de travail nécessaire. Dans Defold, les animations image par image sont stockées soit sous forme d’images individuelles ajoutées à un atlas, soit dans une source de tuiles où toutes les images sont disposées en une séquence horizontale.

Les sprites et les nœuds de boîte de l’interface graphique peuvent lire des animations image par image, que vous pouvez contrôler avec précision en cours d’exécution.
sprite.play_flipbook(). Vous trouverez un exemple ci-dessous.gui.play_flipbook(). Vous trouverez un exemple ci-dessous.Le mode de lecture Once Ping Pong lit l’animation jusqu’à la dernière image, puis inverse l’ordre et la lit en sens inverse jusqu’à la deuxième image de l’animation, sans revenir à la première. Ce comportement facilite l’enchaînement des animations.
Supposons que votre jeu possède une fonction “dodge” qui permet au joueur d’appuyer sur un bouton spécifique pour esquiver. Vous avez créé quatre animations pour accompagner cette fonction d’un retour visuel :
Le script suivant fournit la logique :
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
Lorsque vous sélectionnez une animation ou une image pour un nœud, vous lui attribuez en fait simultanément la source d’images (atlas ou source de tuiles) et l’animation par défaut. La source d’images est définie de manière statique dans le nœud, mais l’animation à lire peut être modifiée en cours d’exécution. Les images fixes sont traitées comme des animations à une seule image : changer d’image en cours d’exécution revient donc à lire une autre animation image par image pour le nœud :
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
Les fonctions sprite.play_flipbook() et gui.play_flipbook() acceptent une fonction de rappel Lua facultative comme dernier argument. Cette fonction est appelée lorsque l’animation est arrivée à son terme. Elle n’est jamais appelée pour les animations en boucle. La fonction de rappel peut servir à déclencher des événements à la fin d’une animation ou à enchaîner plusieurs animations. Exemples :
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