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) складається з послідовності нерухомих зображень, які показуються одне за одним. Цей метод дуже схожий на традиційну мальовану анімацію (див. http://en.wikipedia.org/wiki/Traditional_animation). Він відкриває безмежні можливості, оскільки кожен кадр можна змінювати окремо. Однак кожен кадр зберігається в окремому зображенні, тому обсяг споживаної пам’яті може бути значним. Плавність анімації також залежить від кількості зображень, що показуються щосекунди, але збільшення їхньої кількості зазвичай збільшує й обсяг роботи. Покадрові анімації в Defold зберігаються або як окремі зображення, додані до атласу, або як джерело плиток, у якому всі кадри розташовано в горизонтальній послідовності.

Спрайти та вузли GUI типу Box можуть відтворювати покадрові анімації, а ви маєте широкі можливості керування ними під час виконання.
sprite.play_flipbook(). Приклад наведено нижче.gui.play_flipbook(). Приклад наведено нижче.У режимі відтворення Once Ping Pong анімація відтворюється до останнього кадру, а потім у зворотному порядку до другого кадру анімації, а не до першого. Це спрощує поєднання анімацій у ланцюжок.
Припустімо, що у вашій грі є функція ухилення (“dodge”), яка дає гравцеві змогу натиснути певну кнопку, щоб ухилитися. Ви створили чотири анімації, щоб візуально відобразити цю дію:
Таку логіку реалізує наведений нижче скрипт:
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
Вибираючи анімацію або зображення для вузла, ви насправді одночасно задаєте джерело зображень (атлас або джерело плиток) та типову анімацію. Джерело зображень задається у вузлі статично, але поточну анімацію для відтворення можна змінювати під час виконання. Нерухомі зображення вважаються однокадровими анімаціями, тому зміна зображення під час виконання рівнозначна відтворенню іншої покадрової анімації для вузла:
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
Функції sprite.play_flipbook() та gui.play_flipbook() підтримують необов’язкову функцію зворотного виклику Lua як останній аргумент. Ця функція викликається, коли анімація відтвориться до кінця. Для зациклених анімацій вона ніколи не викликається. Зворотний виклик можна використовувати, щоб запускати події після завершення анімації або поєднувати кілька анімацій у ланцюжок. Приклади:
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