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
플립북 애니메이션은 연속해서 표시되는 정지 이미지들의 시리즈로 구성됩니다. 이 기법은 전통적인 셀 애니메이션(참고: http://en.wikipedia.org/wiki/Traditional_animation)과 매우 비슷합니다. 각 프레임을 개별적으로 조작할 수 있으므로 이 기법은 무한한 가능성을 제공합니다. 하지만 각 프레임이 고유한 이미지에 저장되기 때문에 메모리 사용량이 커질 수 있습니다. 애니메이션의 부드러움은 초당 표시되는 이미지 수에도 좌우되지만, 이미지 수를 늘리면 일반적으로 작업량도 늘어납니다. Defold 플립북 애니메이션은 Atlas에 추가된 개별 이미지로 저장되거나, 모든 프레임이 가로 시퀀스로 배치된 Tile Source로 저장됩니다.

Sprites와 GUI box nodes는 플립북 애니메이션을 재생할 수 있으며, 런타임에 세밀하게 제어할 수 있습니다.
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"는 입력 동작입니다
if action_id == hash("dodge") then
if action.pressed then
sprite.play_flipbook("#sprite", hash("start_dodge"), play_idle_animation)
-- 회피 중임을 기억합니다
self.dodge = true
elseif action.released then
sprite.play_flipbook("#sprite", hash("stop_dodge"), play_idle_animation)
-- 더 이상 회피 중이 아닙니다
self.dodge = false
end
end
end
노드의 애니메이션이나 이미지를 선택할 때는 실제로 이미지 소스(아틀라스 또는 타일 소스)와 기본 애니메이션을 한 번에 할당하는 것입니다. 이미지 소스는 노드에 정적으로 설정되지만, 현재 재생할 애니메이션은 런타임에 변경할 수 있습니다. 정지 이미지는 한 프레임 애니메이션으로 취급되므로 이미지를 변경한다는 것은 런타임에 해당 노드에서 다른 플립북 애니메이션을 재생하는 것과 같습니다:
function init(self)
local character_node = gui.get_node("character")
-- 이 코드는 노드가 새로 재생할 애니메이션/이미지와 같은 atlas 또는 tile source에
-- 있는 기본 애니메이션을 가지고 있어야 합니다.
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