0Pricing
Lua Academy · 강의

LOVE 게임 루프

load, update, draw를 배워 보세요.

LOVE 게임 루프은(는) CoddyKit의 무료 Lua Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Lua Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

LÖVE란 무엇인가요

LÖVE(또는 love2d)는 순수 Lua로 2D 게임을 만들 수 있게 해 주는 무료 프레임워크입니다. 콜백 함수를 작성하면 엔진이 대신 호출합니다.

LÖVE 게임은 main.lua 파일이 있는 폴더에 저장됩니다. 해당 폴더에서 love .로 실행하면 엔진이 창을 열고 루프를 시작합니다.

세 가지 핵심 콜백

LÖVE는 main.lua에서 정의한 세 가지 콜백인 love.load, love.update, love.draw를 통해 게임을 구동합니다.

이 콜백을 직접 호출하지 않아도 됩니다. 엔진이 love.load를 한 번 호출한 다음 게임이 실행되는 동안 매 프레임마다 love.update와 love.draw를 반복해서 호출합니다.

function love.load() end
function love.update(dt) end
function love.draw() end

love.load: 한 번만 수행하는 초기 설정

게임이 시작되면 love.load가 정확히 한 번 실행됩니다. 상태를 설정하는 데 사용하십시오. 이미지를 불러오고 글꼴을 만들며, 루프가 시작되기 전에 테이블을 만들고 변수를 초기화합니다.

시간이 오래 걸리는 작업은 매 프레임 반복되지 않도록 love.update나 love.draw 안이 아니라 여기에서 수행해야 합니다.

function love.load()
  player = { x = 100, y = 100, speed = 200 }
  score = 0
end

love.update: 게임 로직

love.update(dt)는 프레임마다 한 번 실행되며 게임 로직을 담당합니다. 객체 이동, 충돌 확인, 타이머 갱신, 입력 상태 읽기 등을 수행합니다.

dt 인수는 델타 시간으로, 이전 프레임 이후 경과한 시간(초)입니다. update 안에서는 절대 그리지 말고, 그리기는 love.draw에 맡기십시오.

function love.update(dt)
  player.x = player.x + player.speed * dt
end

dt가 중요한 이유

컴퓨터마다 프레임 속도가 다릅니다. 매 프레임 고정된 양만큼 이동시키면 빠른 컴퓨터가 느린 컴퓨터보다 객체를 더 빠르게 이동시킵니다.

dt를 곱하면 움직임이 프레임 속도와 무관해집니다. speed * dt는 "초당 speed 단위"를 의미하므로, 몇 프레임이 렌더링되는지와 관계없이 객체가 같은 거리를 이동합니다.

-- 200 pixels per second, on any machine
player.x = player.x + 200 * dt

love.draw: 렌더링

love.draw는 love.update 이후 프레임마다 한 번 실행됩니다. 화면에 보이는 모든 것은 love.graphics 모듈을 사용해 여기에서 그립니다.

각 그리기 호출 전에 화면이 자동으로 지워지므로, 매 프레임 현재 게임 상태를 바탕으로 전체 장면을 다시 그립니다.

function love.draw()
  love.graphics.rectangle('fill', player.x, player.y, 32, 32)
end

전체 루프 구성하기

콜백을 함께 사용하면 완전한 게임이 됩니다. load가 플레이어를 설정하고, update가 dt를 사용해 플레이어를 이동시키며, draw가 플레이어를 렌더링합니다.

이 load-update-draw 주기는 아무리 복잡한 LÖVE 게임에서도 핵심적으로 작동합니다.

function love.load() x = 0 end
function love.update(dt) x = x + 100 * dt end
function love.draw()
  love.graphics.circle('fill', x, 150, 20)
end

시간 읽기

dt를 누적하여 타이머를 만들 수 있습니다. 일반적으로 경과 시간을 더하다가 임계값을 넘으면 동작을 수행하고, 그 후 임계값을 다시 빼는 방식을 사용합니다.

프레임 수는 하드웨어에 따라 달라지지만 dt는 실제 초를 추적하므로, 프레임을 세는 것보다 이 방법이 더 안정적입니다.

timer = 0
function love.update(dt)
  timer = timer + dt
  if timer >= 1 then
    score = score + 1
    timer = timer - 1
  end
end

love.run과 루프 내부 동작

내부적으로 love.run이 실제 주 루프입니다. love.load를 한 번 호출한 다음 무한히 반복하면서 이벤트를 처리하고, dt를 계산하고, 사용자가 작성한 update와 draw를 호출한 뒤 프레임을 표시합니다.

love.run을 재정의하는 일은 드물지만, 이것이 존재한다는 사실을 알면 dt와 콜백이 어디에서 오는지 이해할 수 있습니다.

-- simplified idea of love.run
-- love.load()
-- while true do
--   dt = timer.step()
--   love.update(dt)
--   love.draw()
-- end

love.quit과 생명 주기

LÖVE는 핵심 세 가지 콜백 외에도 생명 주기 콜백을 제공합니다. 플레이어가 창을 닫을 때 love.quit이 실행되므로 진행 상황을 저장할 수 있습니다.

love.quit에서 true를 반환하면 닫기를 취소합니다. love.focus와 love.resize 같은 다른 콜백은 창 이벤트에 응답합니다.

function love.quit()
  print('Saving before exit...')
  return false  -- false lets the game close
end

게임 일시 정지하기

love.update가 모든 로직을 구동하므로 일시 정지는 간단합니다. 플래그로 로직 실행을 제어하고 일시 정지 상태에서는 건너뛰면 됩니다.

그리기는 계속 실행되므로 일시 정지 오버레이를 렌더링할 수 있습니다. update와 draw를 분리했기 때문에 루프 설계가 매우 유연합니다.

paused = false
function love.update(dt)
  if paused then return end
  player.x = player.x + player.speed * dt
end

빠른 확인

LÖVE 게임 루프에 대한 이해도를 확인해 보십시오.

복습

LÖVE는 콜백을 통해 게임을 실행합니다. love.load는 한 번 초기 설정을 수행하고, love.update(dt)는 매 프레임 로직을 처리하며, love.draw는 매 프레임 렌더링합니다.

dt 값은 움직임이 프레임 속도와 무관하게 유지되도록 하며, love.quit 같은 생명 주기 콜백이 루프를 완성합니다. 이 주기가 모든 love2d 게임을 구동합니다.

자주 묻는 질문

“LOVE 게임 루프” 강의는 무료인가요?

네 — “LOVE 게임 루프” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Lua Academy 강의 전체를 잠금 해제할 수 있습니다. Lua Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“LOVE 게임 루프”에서 뭘 배우나요?

load, update, draw를 배워 보세요. 브라우저에서 직접 실행하는 실습 코드로 Lua Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Lua Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Lua Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“LOVE 게임 루프” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Lua Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Lua Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. LOVE 게임 루프
  2. 도형과 이미지 그리기
  3. 입력 처리하기
  4. 이동과 충돌
← Lua Academy(으)로 돌아가기