El bucle de juego de LOVE
load, update y draw
El bucle de juego de LOVE es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Qué es LÖVE
LÖVE (también escrito love2d) es un framework gratuito que permite crear juegos 2D en Lua puro. Usted escribe funciones de callback y el motor las llama por usted.
Un juego de LÖVE vive en una carpeta que contiene un archivo main.lua. Se ejecuta con love . desde esa carpeta; el motor inicia una ventana y pone en marcha el bucle.
Los tres callbacks principales
LÖVE controla el juego mediante tres callbacks que usted define en main.lua: love.load, love.update y love.draw.
No debe llamarlos usted mismo. El motor llama a love.load una vez y, después, repite love.update y love.draw en cada fotograma mientras el juego está en ejecución.
function love.load() end
function love.update(dt) end
function love.draw() endlove.load: configuración inicial
love.load se ejecuta exactamente una vez al iniciar el juego. Úselo para configurar el estado: cargar imágenes y fuentes, crear las tablas e inicializar las variables antes de que comience el bucle.
Cualquier operación costosa debe realizarse aquí, no dentro de love.update o love.draw, para que no se repita en cada fotograma.
function love.load()
player = { x = 100, y = 100, speed = 200 }
score = 0
endlove.update: lógica del juego
love.update(dt) se ejecuta una vez por fotograma y contiene la lógica del juego: mover objetos, comprobar colisiones, actualizar temporizadores y leer el estado de la entrada.
El argumento dt es el tiempo delta, es decir, los segundos transcurridos desde el último fotograma. Nunca debe dibujar dentro de update; mantenga el dibujo en love.draw.
function love.update(dt)
player.x = player.x + player.speed * dt
endPor qué importa dt
La frecuencia de fotogramas varía entre máquinas. Si moviera un objeto una cantidad fija en cada fotograma, un ordenador rápido lo movería más deprisa que uno lento.
Multiplicar por dt hace que el movimiento sea independiente de la frecuencia de fotogramas. speed * dt significa «unidades de velocidad por segundo», por lo que el objeto recorre la misma distancia independientemente del número de fotogramas renderizados.
-- 200 pixels per second, on any machine
player.x = player.x + 200 * dtlove.draw: renderizado
love.draw se ejecuta una vez por fotograma después de love.update. Todo lo que aparece en pantalla se dibuja aquí mediante el módulo love.graphics.
La pantalla se limpia automáticamente antes de cada llamada de dibujo, por lo que debe volver a dibujar la escena completa en cada fotograma a partir del estado actual del juego.
function love.draw()
love.graphics.rectangle('fill', player.x, player.y, 32, 32)
endEl bucle completo en conjunto
Al combinar los callbacks obtiene un juego completo: load configura al jugador, update lo mueve mediante dt y draw lo renderiza.
Este ciclo de carga, actualización y dibujo es el latido de todo juego de LÖVE, sin importar lo complejo que llegue a ser.
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)
endLeer el reloj
Acumule dt para crear temporizadores. Un patrón habitual consiste en sumar el tiempo transcurrido y actuar cuando supera un umbral; después, se resta el umbral.
Esto es más fiable que contar fotogramas, ya que el número de fotogramas depende del hardware, mientras que dt registra los segundos reales.
timer = 0
function love.update(dt)
timer = timer + dt
if timer >= 1 then
score = score + 1
timer = timer - 1
end
endlove.run y el funcionamiento interno del bucle
Entre bastidores, love.run es el bucle principal real. Llama a love.load una vez y, después, se repite indefinidamente: procesa eventos, calcula dt, llama a sus funciones update y draw y muestra el fotograma.
Rara vez se sobrescribe love.run, pero saber que existe explica de dónde proceden dt y los callbacks.
-- simplified idea of love.run
-- love.load()
-- while true do
-- dt = timer.step()
-- love.update(dt)
-- love.draw()
-- endlove.quit y el ciclo de vida
LÖVE también ofrece callbacks del ciclo de vida además de los tres principales. love.quit se activa cuando el jugador cierra la ventana, lo que permite guardar el progreso.
Devolver true desde love.quit cancela el cierre. Otros callbacks, como love.focus y love.resize, responden a eventos de la ventana.
function love.quit()
print('Saving before exit...')
return false -- false lets the game close
endPausar el juego
Como love.update controla toda la lógica, pausar es sencillo: proteja la lógica con una bandera y omítala cuando el juego esté pausado.
El dibujo sigue ejecutándose, por lo que puede mostrar una superposición de pausa. Esta separación entre actualización y dibujo es precisamente lo que hace tan flexible el diseño del bucle.
paused = false
function love.update(dt)
if paused then return end
player.x = player.x + player.speed * dt
endComprobación rápida
Compruebe cuánto entiende del bucle de juego de LÖVE.
Repaso
LÖVE ejecuta el juego mediante callbacks: love.load configura todo una vez, love.update(dt) gestiona la lógica en cada fotograma y love.draw renderiza cada fotograma.
El valor dt mantiene el movimiento independiente de la frecuencia de fotogramas, y los callbacks del ciclo de vida, como love.quit, completan el bucle. Este ciclo impulsa todos los juegos de love2d.
Preguntas frecuentes
¿La lección «El bucle de juego de LOVE» es gratis?
Sí — el texto completo de «El bucle de juego de LOVE» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «El bucle de juego de LOVE»?
load, update y draw Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «El bucle de juego de LOVE»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- El bucle de juego de LOVE
- Dibujar formas e imágenes
- Gestionar la entrada
- Movimiento y colisiones