Il game loop di LOVE
load, update e draw.
Il game loop di LOVE è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.
Che cos'è LÖVE
LÖVE (scritto anche love2d) è un framework gratuito che permette di creare giochi 2D in puro Lua. Scrive funzioni callback e il motore le chiama al posto suo.
Un gioco LÖVE risiede in una cartella che contiene un file main.lua. Lo esegue con love . da quella cartella: il motore avvia una finestra e avvia il ciclo.
Le tre callback fondamentali
LÖVE gestisce il gioco attraverso tre callback definite in main.lua: love.load, love.update e love.draw.
Non deve chiamarle direttamente. Il motore chiama love.load una volta, quindi ripete love.update e love.draw a ogni frame per tutta la durata del gioco.
function love.load() end
function love.update(dt) end
function love.draw() endlove.load: configurazione iniziale
love.load viene eseguita esattamente una volta all'avvio del gioco. La utilizzi per configurare lo stato: caricare immagini e font, creare le tabelle e inizializzare le variabili prima dell'inizio del ciclo.
Le operazioni costose devono essere eseguite qui, non all'interno di love.update o love.draw, per evitare di ripeterle a ogni frame.
function love.load()
player = { x = 100, y = 100, speed = 200 }
score = 0
endlove.update: logica di gioco
love.update(dt) viene eseguita una volta per frame e contiene la logica di gioco: spostare gli oggetti, controllare le collisioni, aggiornare i timer e leggere lo stato dell'input.
L'argomento dt è il tempo delta, cioè i secondi trascorsi dall'ultimo frame. Non deve mai disegnare all'interno di update: riservi il disegno a love.draw.
function love.update(dt)
player.x = player.x + player.speed * dt
endPerché dt è importante
La frequenza dei fotogrammi varia da un computer all'altro. Se spostasse un oggetto di una quantità fissa a ogni frame, un computer veloce lo farebbe muovere più rapidamente di uno lento.
Moltiplicare per dt rende il movimento indipendente dalla frequenza dei fotogrammi. speed * dt significa "unità di velocità al secondo", quindi un oggetto percorre la stessa distanza indipendentemente dal numero di frame visualizzati.
-- 200 pixels per second, on any machine
player.x = player.x + 200 * dtlove.draw: rendering
love.draw viene eseguita una volta per frame dopo love.update. Tutto ciò che vede sullo schermo viene disegnato qui utilizzando il modulo love.graphics.
Lo schermo viene cancellato automaticamente prima di ogni chiamata di draw, quindi deve ridisegnare l'intera scena a ogni frame utilizzando lo stato corrente del gioco.
function love.draw()
love.graphics.rectangle('fill', player.x, player.y, 32, 32)
endIl ciclo completo
Unendo le callback si ottiene un gioco completo: load configura il giocatore, update lo sposta utilizzando dt e draw lo visualizza.
Questo ciclo load-update-draw è il battito cardiaco di ogni gioco LÖVE, indipendentemente dalla sua complessità.
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)
endLettura dell'orologio
Accumuli dt per creare dei timer. Un pattern comune consiste nel sommare il tempo trascorso e intervenire quando supera una soglia, quindi sottrarre nuovamente la soglia.
È più affidabile che contare i frame, poiché il numero di frame dipende dall'hardware, mentre dt tiene traccia dei secondi reali.
timer = 0
function love.update(dt)
timer = timer + dt
if timer >= 1 then
score = score + 1
timer = timer - 1
end
endlove.run e i dettagli del ciclo
Dietro le quinte, love.run è il vero ciclo principale. Chiama love.load una volta, quindi esegue un ciclo infinito: elabora gli eventi, calcola dt, chiama update e draw e presenta il frame.
Raramente si sovrascrive love.run, ma sapere che esiste aiuta a capire da dove provengono dt e le callback.
-- simplified idea of love.run
-- love.load()
-- while true do
-- dt = timer.step()
-- love.update(dt)
-- love.draw()
-- endlove.quit e il ciclo di vita
LÖVE offre anche callback del ciclo di vita oltre alle tre fondamentali. love.quit viene eseguita quando il giocatore chiude la finestra e permette di salvare i progressi.
Restituire true da love.quit annulla la chiusura. Altre callback, come love.focus e love.resize, rispondono agli eventi della finestra.
function love.quit()
print('Saving before exit...')
return false -- false lets the game close
endMessa in pausa del gioco
Poiché love.update gestisce tutta la logica, mettere il gioco in pausa è semplice: protegga la logica con un flag e la salti quando il gioco è in pausa.
Il disegno continua a essere eseguito, quindi può visualizzare una sovrapposizione di pausa. Questa separazione tra update e draw è proprio ciò che rende il design del ciclo così flessibile.
paused = false
function love.update(dt)
if paused then return end
player.x = player.x + player.speed * dt
endVerifica rapida
Verifichi la sua comprensione del ciclo di gioco di LÖVE.
Riepilogo
LÖVE esegue il gioco attraverso callback: love.load configura tutto una volta, love.update(dt) gestisce la logica a ogni frame e love.draw esegue il rendering a ogni frame.
Il valore dt mantiene il movimento indipendente dalla frequenza dei fotogrammi, mentre callback del ciclo di vita come love.quit completano il ciclo. Questo ciclo alimenta ogni gioco love2d.
Domande Frequenti
La lezione «Il game loop di LOVE» è gratuita?
Sì — il testo completo di «Il game loop di LOVE» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.
Cosa imparerò in «Il game loop di LOVE»?
load, update e draw. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Lua Academy?
Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Il game loop di LOVE»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Lua Academy?
Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Il game loop di LOVE
- Disegnare forme e immagini
- Gestire l'input
- Movimento e collisioni