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

Flipbook-Animation

Eine Flipbook-Animation besteht aus einer Folge von Einzelbildern, die nacheinander angezeigt werden. Die Technik ähnelt der traditionellen Einzelbildanimation (siehe http://en.wikipedia.org/wiki/Traditional_animation). Da jedes Einzelbild unabhängig bearbeitet werden kann, bietet sie unbegrenzte Möglichkeiten. Das Speichern vieler unterschiedlicher Bilder kann allerdings viel Texturspeicher erfordern. Wie flüssig eine Animation wirkt, hängt auch von der Anzahl der pro Sekunde angezeigten Bilder ab; mehr Bilder bedeuten meist auch mehr Arbeit. Flipbook-Animationen in Defold werden entweder als einzelne Bilder in einem Atlas oder als Kacheln in einer Kachelquelle gespeichert. Animationen aus Kachelquellen wählen Kacheln über eine Liste Frames in beliebiger Reihenfolge aus dem Bildraster aus; auch Wiederholungen sind möglich.

Animationsbogen Laufanimation in Schleife

Flipbook-Animationen abspielen

Sprites und GUI-Box-Knoten (GUI box nodes) können Flipbook-Animationen abspielen, und du kannst ihre Wiedergabe zur Laufzeit umfassend steuern.

Sprites
Um eine Animation zur Laufzeit abzuspielen, verwendest du die Funktion sprite.play_flipbook(). Ein Beispiel findest du weiter unten.
GUI-Box-Knoten
Um eine Animation zur Laufzeit abzuspielen, verwendest du die Funktion 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.

Sprite-Beispiel

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:

“idle”
Eine wiederholt abgespielte Animation der Spielfigur im Ruhezustand.
“dodge_idle”
Eine wiederholt abgespielte Animation der Spielfigur im Ruhezustand in der Ausweichhaltung.
“start_dodge”
Eine einmal abgespielte Übergangsanimation, die die Spielfigur vom Stehen in die Ausweichhaltung versetzt.
“stop_dodge”
Eine einmal abgespielte Übergangsanimation, die die Spielfigur aus der Ausweichhaltung zurück ins Stehen versetzt.

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

Beispiel für einen GUI-Box-Knoten

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

Callbacks bei Abschluss

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