LOVE-spilløkken
load, update og draw.
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() endlove.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
endlove.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
endHvorfor 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 * dtlove.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)
endHele 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)
endAflæ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
endlove.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()
-- endlove.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
endSæ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
endHurtigt 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.
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
- LOVE-spilløkken
- Tegn former og billeder
- Håndtér input
- Bevægelse og kollisioner