
이전 포스팅을 통해, 기술 스택으로 선정한 LÖVE 엔진을 설치 해 보도록 한다.

개발 환경의 운영체제게 맞게 설치 하면 된다.
설치 후, 해당 앱을 실행 하니 다음과 같은 화면을 확인 했다.

여기서 따로 할 수 있는 것이 아무것도 없었다! 컴파일과 실행을 위한 엔진이므로 따로 별도의 코드 작성이 필요 하다. 이제 간단한 첫 코드 작성과 실행 정도를 진행 해 보도록 하자.
NotePad++, Visual Studio Code 등 텍스트 편집기 혹은 코드 에디터에서 자유롭게 작성이 가능하며, 당연히 특정 코드 에디터가 필요하지는 않다.
나의 경우 가장 익숙한 IntelliJ IDE 를 그대로 사용하려했다. LÖVE는 프로그래밍 언어로는 Lua 라는 언어를 사용하기에, Lua 플러그인을 추가로 설치 했다. 그렇게 main.lua 파일을 만들었고 코드를 작성 하기로 한다.
그런데 막상 Lua 플러그인이 제대로 동작하지 않는 것 같았고, 다른 코드 에디터를 찾아보기로 했다. (특화된 코드 에디터를 사용하는 이유는 자동완성과 같은 부분에서 도움을 받을 수 있기 때문이다)
그래서 결국 Pulsar-Edit 라는 코드 에디터를 사용하기로 했다. Atom 에디터 기반이라고 하며, LÖVE엔진을 위한 플러그인이 따로 있다고 해서 고르게 되었다.
https://pulsar-edit 설치 를 진행 하고, 패키지 설치를 한다.

love-ide를 다운 받으면 되는데, 관련 디펜던시도 포함해서 설치 하겠냐는 메시지에 OK를 눌러 주자.
그후 설치한 love-ide 패키지의 Settings 를 클릭 한다.

실행 경로를 확인하고, 설치된 LÖVE엔진의 경로를 직접 입력 해 주자.
이제 코드 에디터도 설정이 끝났고, LÖVE의 기본 실행을 해 보자!
LÖVE 공식 문서의 예제를 따라 실행 해 보기로 한다. 공식 Github 예제 정도가 있을 줄 알았는데, 내가 못 찾은 건지 찾아 볼 수 없었고, 직접 만들어 봤다.
main.lua 라는 파일을 만들고, 다음과 같이 코드를 작성한다.
function love.draw()
love.graphics.print("Hello World!", 400, 300)
end

Pulsar-Edit 기준으로, 오른쪽 방향 삼각형 아이콘 (실행 아이콘)을 누르면 바로 코드가 실행이 되었다.

실행 화면이다. 코드만 봐도 "Hello World!" 문자열을 출력한다는 것을 이해 할 수 있었다.
부여된 숫자는 직접 변경을 해 보며, 화면에서의 좌표 값을 의미하고 있다는 것을 대략적으로 유추 해 볼 수 있었다.
이미지를 준비 하고, 이 이미지를 화면에 출력 해 본다.
function love.load()
whale = love.graphics.newImage("whale.png")
end
function love.draw()
love.graphics.draw(whale, 300, 200)
end
function love.load()
sound = love.audio.newSource("music.ogg", "stream")
love.audio.play(sound)
end
위 2가지 예시는 출력에 필요한 자원(리소스)가 없어서 내가 직접 따로 구해서 구현 해 보기로 했다. 그리고 이 과정에서 Lua 언어는 실행구조가 main.lua를 기본으로 한다. 별도로 따로 main.lua 파일을 3개로 만들어서 구현하기에는 구조가 별로인 것 같아서, 별도로 모듈화 해서 실행 할 수 있는 방법을 찾아봤고, 다음과 같은 코드로 구현 해 볼 수 있었다.
local textExample = require("text_example")
local imageExample = require("image_example")
local soundExample = require("sound_example")
local currentExample = 1
function love.load()
textExample.load()
imageExample.load()
soundExample.load()
end
function love.draw()
if currentExample == 1 then
textExample.draw()
elseif currentExample == 2 then
imageExample.draw()
elseif currentExample == 3 then
soundExample.draw()
end
end
function love.keypressed(key)
local previousExample = currentExample
if key == "1" then
currentExample = 1
elseif key == "2" then
currentExample = 2
elseif key == "3" then
currentExample = 3
soundExample.start()
end
if previousExample == 3 and currentExample ~= 3 then
soundExample.stop()
end
end
각 구현 기능별로 모듈화 하고, 1~3번 버튼을 누르면 실행 하도록 해봤다.
지금 단계에서는 어떻게 구조적으로 코드를 설계 할 수 있을까 보다는 단순 구현의 초점을 맞췄다.
실제로 실행 후, 키보드 1~3번을 누르면 각 기능이 정상적으로 동작하는 것을 쉽게 확인이 가능했다.
Lua언어 혹은 LÖVE엔진의 기초문법과 같은 내용은 따로 정리하지는 않겠다.
Lua의 문법적으로 C-like (C언어를 기초로 만듦) 언어와는 조금 다른점이 있다는 것이 언어의 특징중 하나라고 쉽게 찾아 볼 수 있었다. 이와 관련된 내용은 실제 개발 단계에 들어갔을 때 필요에 따라 간단히 정리 해 볼 수도? 현재 단계는 간단한 실행을 해본 것 만으로 끝내도록 한다.
이제 다음 단계는 Spine을 통해서 캐릭터 애니메이션을 만들고, 이것을 LÖVE 엔진에서 구현 해 보는 것을 목표로 한다. Spine Trial 버전에 예시 프로젝트를 통해서 스켈레톤 애니메이션이 어떻게 구성되고 만들 수 있는지 알아볼 수 있다.
하지만 이 단계에 들어가기 전에 선행 되어야 할 작업으로, 직접 사용할 그래픽 자원을 생성 해야 한다. Zero Base에서 직접 만들어 나가는 것을 목표로 해야, 이후의 작업을 직접 진행 할 수 있기 때문이다.
그래픽 자원은 Stable Diffusion을 통해서 생성하기로 한다.
Stable Diffusion에 대해서도 알아가게 되면 상당한 시간이 필요하다. 그래서 최대한 바로 써 먹을 수 있을 정도의 중요 포인트만 알아가며 구현 하는 것을 목표로 다음 포스팅을 진행 하겠다.