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
Eine Flipbook-Animation (flipbook animation) besteht aus einer Reihe von Einzelbildern, die nacheinander angezeigt werden. Die Technik ähnelt stark der traditionellen Folienanimation (siehe http://en.wikipedia.org/wiki/Traditional_animation). Sie bietet unbegrenzte Möglichkeiten, da jedes Einzelbild unabhängig bearbeitet werden kann. Da jedoch jedes Einzelbild als eigenes Bild gespeichert wird, kann der Speicherbedarf hoch sein. Wie flüssig die Animation wirkt, hängt auch von der Anzahl der pro Sekunde angezeigten Bilder ab. Eine höhere Anzahl von Bildern bedeutet allerdings meist auch mehr Arbeit. In Defold werden Flipbook-Animationen entweder als einzelne Bilder gespeichert, die einem Atlas hinzugefügt werden, oder als Kachelquelle (tile source), in der alle Einzelbilder in einer horizontalen Folge angeordnet sind.

Sprites und GUI-Box-Knoten (GUI box nodes) können Flipbook-Animationen abspielen, und du kannst ihre Wiedergabe zur Laufzeit umfassend steuern.
sprite.play_flipbook(). Ein Beispiel findest du weiter unten.gui.play_flipbook(). Ein Beispiel findest du weiter unten.Der Wiedergabemodus Once Ping Pong spielt die Animation bis zum letzten Einzelbild ab, kehrt dann die Reihenfolge um und spielt sie rückwärts bis zum zweiten Einzelbild der Animation ab, nicht bis zum ersten. Dadurch lassen sich Animationen leichter aneinanderreihen.
Angenommen, dein Spiel hat eine Ausweichfunktion namens “dodge”, mit der die Spielfigur durch Drücken einer bestimmten Taste ausweichen kann. Du hast vier Animationen erstellt, um die Funktion durch visuelle Rückmeldungen zu unterstützen:
Das folgende Skript stellt die Logik bereit:
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
Wenn du eine Animation oder ein Bild für einen Knoten auswählst, weist du ihm tatsächlich die Bildquelle (Atlas oder Kachelquelle) und die Standardanimation in einem Schritt zu. Die Bildquelle ist im Knoten statisch festgelegt, aber die aktuell abzuspielende Animation kann zur Laufzeit geändert werden. Standbilder werden als Animationen mit einem Einzelbild behandelt. Ein Bild zur Laufzeit zu ändern, entspricht daher dem Abspielen einer anderen Flipbook-Animation für den Knoten:
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
Die Funktionen sprite.play_flipbook() und gui.play_flipbook() unterstützen eine optionale Lua-Callback-Funktion als letztes Argument. Diese Funktion wird aufgerufen, wenn die Animation bis zum Ende abgespielt wurde. Bei wiederholt abgespielten Animationen wird die Funktion nie aufgerufen. Mit dem Callback kannst du nach Abschluss einer Animation Ereignisse auslösen oder mehrere Animationen aneinanderreihen. Beispiele:
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