Lua Academy · Lektion

LOVE-spilløkken

load, update og draw.

Lektion 1 af 413 trin

LOVE-spilløkken er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad er LÖVE?

LÖVE (også skrevet love2d) er et gratis rammeværk, som lader dig bygge 2D-spil i ren Lua. Du skriver callback-funktioner, og spilmotoren kalder dem for dig.

Et LÖVE-spil ligger i en mappe med en main.lua-fil. Du kører det med love . fra den mappe, hvorefter spilmotoren starter et vindue og begynder løkken.

De tre centrale callback-funktioner

LÖVE styrer dit spil gennem tre callback-funktioner, som du definerer i main.lua: love.load, love.update og love.draw.

Du kalder dem ikke selv. Spilmotoren kalder love.load én gang og gentager derefter love.update og love.draw for hvert billede, så længe spillet kører.

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

love.load: Opsætning én gang

love.load kører præcis én gang, når spillet starter. Brug den til at konfigurere tilstanden: indlæs billeder og skrifttyper, opret dine tabeller, og initialiser variabler, før løkken begynder.

Alt beregningstungt bør ske her og ikke inde i love.update eller love.draw, så det ikke gentages for hvert billede.

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

love.update: Spillets logik

love.update(dt) kører én gang pr. billede og indeholder spillets logik: flytning af objekter, kontrol af kollisioner, opdatering af timere og læsning af inputtilstanden.

Argumentet dt er tidsdeltaet, altså antallet af sekunder siden det forrige billede. Du bør aldrig tegne i update; behold tegningen i love.draw.

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

Hvorfor dt er vigtigt

Billedhastigheden varierer fra maskine til maskine. Hvis du flyttede med en fast mængde for hvert billede, ville en hurtig computer flytte objekter hurtigere end en langsom.

Hvis du ganger med dt, bliver bevægelsen uafhængig af billedhastigheden. speed * dt betyder "hastighedsenheder pr. sekund", så et objekt bevæger sig den samme afstand, uanset hvor mange billeder der gengives.

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

love.draw: Gengivelse

love.draw kører én gang pr. billede efter love.update. Alt, du ser på skærmen, tegnes her ved hjælp af modulet love.graphics.

Skærmen ryddes automatisk før hvert tegningskald, så du tegner hele scenen igen for hvert billede ud fra spillets aktuelle tilstand.

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

Hele løkken samlet

Saml callback-funktionerne, så har du et komplet spil: load konfigurerer spilleren, update flytter den ved hjælp af dt, og draw gengiver den.

Denne load-update-draw-cyklus er grundrytmen i alle LÖVE-spil, uanset hvor komplekse de bliver.

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

Aflæsning af uret

Akkumuler dt for at opbygge timere. Et almindeligt mønster er at summere den forløbne tid og udføre en handling, når summen overskrider en tærskel, hvorefter tærsklen trækkes fra igen.

Det er mere pålideligt end at tælle billeder, eftersom antallet af billeder afhænger af hardwaren, mens dt følger de faktiske sekunder.

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

love.run og løkkens indre

Bag kulisserne er love.run den egentlige hovedløkke. Den kalder love.load én gang og kører derefter uendeligt: den behandler hændelser, beregner dt, kalder din update og draw og viser billedet.

Du tilsidesætter sjældent love.run, men hvis du ved, at den findes, forstår du, hvor dt og callback-funktionerne kommer fra.

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

love.quit og livscyklus

LÖVE tilbyder også callback-funktioner til livscyklussen ud over de tre centrale. love.quit udløses, når spilleren lukker vinduet, så du kan gemme fremskridt.

Hvis du returnerer true fra love.quit, annulleres lukningen. Andre callback-funktioner som love.focus og love.resize reagerer på vindueshændelser.

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

Sæt spillet på pause

Da love.update styrer al logik, er det nemt at sætte spillet på pause: beskyt logikken med et flag, og spring den over, når spillet er sat på pause.

Tegningen fortsætter, så du kan vise en pausevisning. Denne adskillelse af update og draw er netop grunden til, at løkkens design er så fleksibelt.

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

Hurtigt tjek

Test din forståelse af LÖVE-spilløkken.

Opsummering

LÖVE kører dit spil gennem callback-funktioner: love.load konfigurerer det én gang, love.update(dt) håndterer logikken for hvert billede, og love.draw gengiver hvert billede.

Værdien dt gør bevægelsen uafhængig af billedhastigheden, og callback-funktioner til livscyklussen som love.quit fuldender løkken. Denne cyklus driver alle love2d-spil.

Gratis at komme i gang

Lær Lua med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
40
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “LOVE-spilløkken” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “LOVE-spilløkken”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “LOVE-spilløkken”?

load, update og draw. Du øver dig i Lua Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Lua Academy?

Der kræves ingen tidligere erfaring. Lua Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “LOVE-spilløkken”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Lua Academy-lektion?

Ja. Alle Lua Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. LOVE-spilløkken
  2. Tegn former og billeder
  3. Håndtér input
  4. Bevægelse og kollisioner
← Tilbage til Lua Academy