Die LOVE-Game-Loop
load, update und draw.
Die LOVE-Game-Loop ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist LÖVE
LÖVE (auch als love2d bezeichnet) ist ein kostenloses Framework, mit dem Sie 2D-Spiele in reinem Lua entwickeln können. Sie schreiben Callback-Funktionen, die von der Engine für Sie aufgerufen werden.
Ein LÖVE-Spiel befindet sich in einem Ordner mit einer main.lua-Datei. Sie starten es in diesem Ordner mit love .; die Engine öffnet ein Fenster und startet die Schleife.
Die drei zentralen Callbacks
LÖVE steuert Ihr Spiel über drei Callbacks, die Sie in main.lua definieren: love.load, love.update und love.draw.
Sie rufen sie nicht selbst auf. Die Engine ruft love.load einmal auf und wiederholt anschließend love.update und love.draw in jedem Frame, solange das Spiel läuft.
function love.load() end
function love.update(dt) end
function love.draw() endlove.load: Einmalige Einrichtung
love.load wird beim Start des Spiels genau einmal ausgeführt. Verwenden Sie es, um den Zustand einzurichten: Laden Sie Bilder und Schriftarten, erstellen Sie Ihre Tabellen und initialisieren Sie Variablen, bevor die Schleife beginnt.
Aufwendige Vorgänge sollten hier stattfinden, nicht innerhalb von love.update oder love.draw, damit sie nicht in jedem Frame wiederholt werden.
function love.load()
player = { x = 100, y = 100, speed = 200 }
score = 0
endlove.update: Spiellogik
love.update(dt) wird einmal pro Frame ausgeführt und enthält Ihre Spiellogik: Objekte bewegen, Kollisionen prüfen, Timer aktualisieren und den Eingabestatus auslesen.
Das Argument dt ist die Delta-Zeit, also die seit dem letzten Frame vergangenen Sekunden. Zeichnen Sie niemals innerhalb von update, sondern nur in love.draw.
function love.update(dt)
player.x = player.x + player.speed * dt
endWarum dt wichtig ist
Die Bildrate unterscheidet sich je nach Rechner. Wenn Sie Objekte pro Frame um einen festen Betrag bewegen, bewegt ein schneller Computer sie schneller als ein langsamer.
Die Multiplikation mit dt macht die Bewegung unabhängig von der Bildrate. speed * dt bedeutet "Geschwindigkeitseinheiten pro Sekunde", sodass ein Objekt unabhängig von der Anzahl der gerenderten Frames dieselbe Strecke zurücklegt.
-- 200 pixels per second, on any machine
player.x = player.x + 200 * dtlove.draw: Darstellung
love.draw wird nach love.update einmal pro Frame ausgeführt. Alles, was Sie auf dem Bildschirm sehen, wird hier mit dem Modul love.graphics gezeichnet.
Der Bildschirm wird vor jedem Zeichenaufruf automatisch geleert. Deshalb zeichnen Sie in jedem Frame die gesamte Szene ausgehend vom aktuellen Spielzustand neu.
function love.draw()
love.graphics.rectangle('fill', player.x, player.y, 32, 32)
endDie vollständige Schleife
Wenn Sie die Callbacks zusammenfügen, erhalten Sie ein vollständiges Spiel: load richtet den Spieler ein, update bewegt ihn mithilfe von dt und draw stellt ihn dar.
Dieser Load-Update-Draw-Zyklus ist der Herzschlag jedes LÖVE-Spiels, unabhängig davon, wie komplex es wird.
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)
endDie Uhr auslesen
Durch Aufsummieren von dt können Sie Timer erstellen. Ein gängiges Muster besteht darin, die vergangene Zeit zu summieren und eine Aktion auszuführen, sobald sie einen Schwellenwert überschreitet. Anschließend ziehen Sie den Schwellenwert wieder ab.
Das ist zuverlässiger als das Zählen von Frames, da die Frame-Anzahl von der Hardware abhängt, während dt die tatsächlichen Sekunden erfasst.
timer = 0
function love.update(dt)
timer = timer + dt
if timer >= 1 then
score = score + 1
timer = timer - 1
end
endlove.run und die Interna der Schleife
Hinter den Kulissen ist love.run die eigentliche Hauptschleife. Sie ruft love.load einmal auf und läuft dann endlos weiter: Sie verarbeitet Ereignisse, berechnet dt, ruft Ihr update und draw auf und zeigt den Frame an.
Sie überschreiben love.run nur selten. Wenn Sie wissen, dass es existiert, verstehen Sie jedoch, woher dt und die Callbacks kommen.
-- simplified idea of love.run
-- love.load()
-- while true do
-- dt = timer.step()
-- love.update(dt)
-- love.draw()
-- endlove.quit und der Lebenszyklus
LÖVE bietet neben den drei zentralen Callbacks weitere Callbacks für den Lebenszyklus. love.quit wird ausgelöst, wenn der Spieler das Fenster schließt, sodass Sie den Fortschritt speichern können.
Wenn Sie aus love.quit true zurückgeben, wird das Schließen abgebrochen. Andere Callbacks wie love.focus und love.resize reagieren auf Fensterereignisse.
function love.quit()
print('Saving before exit...')
return false -- false lets the game close
endDas Spiel pausieren
Da love.update die gesamte Logik steuert, ist das Pausieren einfach: Sichern Sie Ihre Logik mit einem Flag ab und überspringen Sie sie, wenn das Spiel pausiert ist.
Das Zeichnen läuft weiter, sodass Sie eine Pausenüberlagerung darstellen können. Diese Trennung von update und draw ist genau der Grund, warum das Schleifendesign so flexibel ist.
paused = false
function love.update(dt)
if paused then return end
player.x = player.x + player.speed * dt
endSchnelltest
Testen Sie Ihr Verständnis der LÖVE-Spielschleife.
Zusammenfassung
LÖVE führt Ihr Spiel über Callbacks aus: love.load richtet den Zustand einmalig ein, love.update(dt) verarbeitet in jedem Frame die Logik und love.draw stellt in jedem Frame die Szene dar.
Der Wert dt hält die Bewegung unabhängig von der Bildrate, und Lifecycle-Callbacks wie love.quit vervollständigen die Schleife. Dieser Zyklus bildet die Grundlage jedes love2d-Spiels.
Häufig gestellte Fragen
Ist die Lektion „Die LOVE-Game-Loop“ kostenlos?
Ja — der vollständige Text von „Die LOVE-Game-Loop“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Die LOVE-Game-Loop“?
load, update und draw. Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „Die LOVE-Game-Loop“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Die LOVE-Game-Loop
- Formen und Bilder zeichnen
- Eingaben behandeln
- Bewegung und Kollisionen