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
Animacja flip-book składa się z serii nieruchomych obrazów wyświetlanych jeden po drugim. Technika ta jest bardzo podobna do tradycyjnej animacji poklatkowej (zobacz http://en.wikipedia.org/wiki/Traditional_animation). Daje niemal nieograniczone możliwości, ponieważ każdą klatkę można modyfikować osobno. Z drugiej strony koszt pamięci może być wysoki, bo każda klatka jest przechowywana jako osobny obraz. Płynność animacji zależy również od liczby obrazów wyświetlanych w każdej sekundzie, a zwiększenie tej liczby zwykle oznacza też więcej pracy dla silnika. Animacje flip-book w Defold są przechowywane albo jako osobne obrazy dodane do Atlas, albo jako Tile Source z wszystkimi klatkami ułożonymi w poziomy ciąg.

Sprite’y i węzły GUI box mogą odtwarzać animacje flip-book, a w czasie działania programu masz nad nimi dużą kontrolę.
sprite.play_flipbook(). Zobacz przykład poniżej.gui.play_flipbook(). Zobacz przykład poniżej.Tryb odtwarzania once ping-pong odtwarza animację do ostatniej klatki, a następnie odtwarza ją w odwrotnej kolejności aż do drugiej klatki animacji, a nie z powrotem do pierwszej. Dzięki temu łatwiej łączyć animacje w łańcuch.
Załóżmy, że w grze istnieje funkcja “dodge”, dzięki której gracz może nacisnąć określony przycisk, aby wykonać unik. Przygotowano cztery animacje wspierające tę funkcję i zapewniające informację zwrotną:
Poniższy skrypt zawiera logikę:
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" to nasza akcja wejściowa
if action_id == hash("dodge") then
if action.pressed then
sprite.play_flipbook("#sprite", hash("start_dodge"), play_idle_animation)
-- zapamiętaj, że wykonujemy unik
self.dodge = true
elseif action.released then
sprite.play_flipbook("#sprite", hash("stop_dodge"), play_idle_animation)
-- nie wykonujemy już uniku
self.dodge = false
end
end
end
Wybierając animację albo obraz dla węzła, w praktyce przypisujesz jednocześnie źródło obrazu (atlas albo Tile Source) oraz domyślną animację. Źródło obrazu jest ustawione statycznie w węźle, ale bieżącą animację można zmieniać w czasie działania programu. Nieruchome obrazy są traktowane jak animacje jednoklatkowe, więc zmiana obrazu w czasie działania programu jest równoważna odtworzeniu dla węzła innej animacji flip-book:
function init(self)
local character_node = gui.get_node("character")
-- To wymaga, aby węzeł miał domyślną animację w tym samym atlasie lub Tile Source
-- co nowa animacja/obraz, który odtwarzamy.
gui.play_flipbook(character_node, "jump_left")
end
Funkcje sprite.play_flipbook() i gui.play_flipbook() obsługują opcjonalną funkcję callback jako ostatni argument Lua. Zostanie ona wywołana, gdy animacja dotrze do końca. Nie jest wywoływana dla animacji zapętlonych. Callback można wykorzystać do uruchamiania zdarzeń po zakończeniu animacji albo do łączenia wielu animacji w łańcuch. Przykłady:
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