O laço de jogo do LOVE
load, update e draw.
O laço de jogo do LOVE é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
O que é LÖVE
LÖVE, também escrito como love2d, é uma estrutura gratuita que permite criar jogos 2D usando apenas Lua. Você escreve funções de retorno, e o mecanismo as chama por você.
Um jogo de LÖVE fica em uma pasta com um arquivo main.lua. Você o executa com love . nessa pasta, e o mecanismo abre uma janela e inicia o ciclo.
As três funções de retorno principais
O LÖVE conduz o jogo por meio de três funções de retorno que você define em main.lua: love.load, love.update e love.draw.
Você não as chama diretamente. O mecanismo chama love.load uma vez e depois repete love.update e love.draw a cada quadro enquanto o jogo estiver em execução.
function love.load() end
function love.update(dt) end
function love.draw() endlove.load: configuração inicial
love.load é executado exatamente uma vez quando o jogo começa. Use-o para configurar o estado: carregar imagens e fontes, criar suas tabelas e inicializar variáveis antes do início do ciclo.
Qualquer operação custosa deve acontecer aqui, não dentro de love.update ou love.draw, para não ser repetida a cada quadro.
function love.load()
player = { x = 100, y = 100, speed = 200 }
score = 0
endlove.update: lógica do jogo
love.update(dt) é executado uma vez por quadro e contém a lógica do jogo: mover objetos, verificar colisões, atualizar temporizadores e ler o estado da entrada.
O argumento dt é o tempo delta, ou seja, os segundos transcorridos desde o último quadro. Você nunca deve desenhar dentro de update; mantenha o desenho em love.draw.
function love.update(dt)
player.x = player.x + player.speed * dt
endPor que dt é importante
A taxa de quadros varia entre os computadores. Se você movesse algo por uma quantidade fixa a cada quadro, um computador rápido moveria os objetos mais depressa do que um computador lento.
Multiplicar por dt torna o movimento independente da taxa de quadros. speed * dt significa "unidades de velocidade por segundo", portanto um objeto percorre a mesma distância, independentemente de quantos quadros sejam renderizados.
-- 200 pixels per second, on any machine
player.x = player.x + 200 * dtlove.draw: renderização
love.draw é executado uma vez por quadro, depois de love.update. Tudo o que você vê na tela é desenhado aqui usando o módulo love.graphics.
A tela é limpa automaticamente antes de cada chamada de desenho, portanto você redesenha a cena completa a cada quadro usando o estado atual do jogo.
function love.draw()
love.graphics.rectangle('fill', player.x, player.y, 32, 32)
endO ciclo completo em conjunto
Ao juntar as funções de retorno, você tem um jogo completo: load configura o jogador, update move-o usando dt e draw o renderiza.
Esse ciclo load-update-draw é o coração de todo jogo de LÖVE, por mais complexo que ele se torne.
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)
endLendo o relógio
Acumule dt para criar temporizadores. Um padrão comum é somar o tempo transcorrido e agir quando ele ultrapassar um limite, subtraindo depois esse limite do total.
Isso é mais confiável do que contar quadros, pois a quantidade de quadros depende do equipamento, enquanto dt acompanha os segundos reais.
timer = 0
function love.update(dt)
timer = timer + dt
if timer >= 1 then
score = score + 1
timer = timer - 1
end
endlove.run e os detalhes internos do ciclo
Nos bastidores, love.run é o ciclo principal de fato. Ele chama love.load uma vez e depois entra em um ciclo infinito: processa eventos, calcula dt, chama suas funções update e draw e apresenta o quadro.
Você raramente substitui love.run, mas saber que ele existe explica de onde vêm dt e as funções de retorno.
-- simplified idea of love.run
-- love.load()
-- while true do
-- dt = timer.step()
-- love.update(dt)
-- love.draw()
-- endlove.quit e o ciclo de vida
O LÖVE também oferece funções de retorno do ciclo de vida além das três principais. love.quit é acionado quando o jogador fecha a janela, permitindo salvar o progresso.
Retornar true de love.quit cancela o fechamento. Outras funções de retorno, como love.focus e love.resize, respondem a eventos da janela.
function love.quit()
print('Saving before exit...')
return false -- false lets the game close
endPausando o jogo
Como love.update conduz toda a lógica, pausar é fácil: proteja sua lógica com um sinalizador e ignore-a quando o jogo estiver pausado.
O desenho continua sendo executado, então você pode renderizar uma sobreposição de pausa. Essa separação entre update e draw é exatamente o que torna o projeto do ciclo tão flexível.
paused = false
function love.update(dt)
if paused then return end
player.x = player.x + player.speed * dt
endVerificação rápida
Teste sua compreensão do ciclo de jogo do LÖVE.
Recapitulação
O LÖVE executa seu jogo por meio de funções de retorno: love.load configura tudo uma vez, love.update(dt) cuida da lógica a cada quadro e love.draw renderiza a cada quadro.
O valor dt mantém o movimento independente da taxa de quadros, e funções de retorno do ciclo de vida, como love.quit, completam o ciclo. Esse ciclo dá suporte a todo jogo de love2d.
Perguntas Frequentes
A aula “O laço de jogo do LOVE” é grátis?
Sim — o texto completo de “O laço de jogo do LOVE” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “O laço de jogo do LOVE”?
load, update e draw. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “O laço de jogo do LOVE”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- O laço de jogo do LOVE
- Desenhando formas e imagens
- Lidando com entradas
- Movimento e colisões