0Pricing
Lua Academy · Aula

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() end

love.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
end

love.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
end

Por 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 * dt

love.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)
end

O 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)
end

Lendo 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
end

love.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()
-- end

love.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
end

Pausando 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
end

Verificaçã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

  1. O laço de jogo do LOVE
  2. Desenhando formas e imagens
  3. Lidando com entradas
  4. Movimento e colisões
← Voltar para Lua Academy