Como iniciar no gamedev com Lua

Introdução

Para a maioria das pessoas que gostam de tecnologia e todo seu universo já pensou alguma vez em criar um jogo, para quem inicia no mundo da programação é um bom artificio para que se possa aprender coisas valiosas e que vão ser usadas durante toda sua carreira. Hoje em dia há muitos jeitos que te permitem criar jogos, inclusive criar pelo seu celular, cuidando de todas as etapas de produção como arte, sound design e programação.

Um exemplo de método facil de se criar jogos são as Game engines, ferramentas que auxiliam no desenvolvimento, cuidando de coisas como Renderização de sprites, controle de memória, detecção de entrada (mouse, teclado ou gamepad), fisica, Iluminação entre outras funções que aceleram o processo de desenvolvimento. Mas um de seus maiores defeitos são que na maioria das engines, o desenvolvedor quase não precisa criar suas coisas do zero, exemplo: gravidade de um objeto, pois isso ja está pronto na engine com seu sistema de fisica pré-desenvolvido.

Por outro lado existem as frameworks/Bibliotecas, elas não são tão completas quanto uma game engine, deixando o controle quase que total para o desenvolvedor, isso signfica que o ele terá que fazer suas ferramentas do zero, exemplo interface gráfica, editor de mapas ou até um sistema de animações de sprites.

Desenvolvendo com Lua

LUA é uma linguagem de programação brasileira, desevolvida pela PUC-RIO em 1993 e criada com o propósito de expandir aplcações para prototipagem e para ser embarcada em softwares complexos.

Apesar de muito poderosa, ela tambem é muito simples, multiparadigmas e super leve. Um exemplo de como lua é simples, um classico _hello world em lua:

print("Hello world")

Alguns links para quem quer começar a aprender Lua

Por onde começar

Para se iniciar a criar seus jogos usando Lua, iremos usar uma framework já conhecida a LÖVE 2D. Ela é uma framework 2D focada justamente em desenvolvimento com lua, ela foi escrita usando o codigo fonte de lua em ANSI C, C++ e mais outras para suporte a varias plataformas (MacOS, Linux, Android, iOS), e vem completa para que você consiga fazer seus projetos, que não precisam ser apenas jogos.

Para utilizar, é necessario fazer o download de seus binários no site oficial da framework, como um usuario recomendo se baixar a versão de instalador pois assim ja será feita a configuração do %path%. oque isso significa?

Basicamente quando você digitar o comando love no seu terminal de comando, ele automaticamente ira iniciar o Love.

Você pode fazer o download do Lve no site oficial clicando aqui

Para a proxima etapa, será obter um editor de textos, isso vai de sua escolha pessoal, eu tenho duas recomendações :

  • O Visual Studio Code Alem da variedade de temas e metodos de personalização, ele tem varias extensões muito boas para quem vai desenvolver em lua ou Love2D.

  • Mas tambem recomendo o Sublime Text 3 um ótimo editor de texto, ja vem com suporte a multiplas linguagens, alem que é possivel adicionar extensões e temas que podem auxiliar durante o desenvolvimento.

Ambos os editores de textos são gratuitos.

os Links de download de ambos:

Como o LÖVE funciona?

Seu interpretador tem duas formas de executar seus projetos. O primeiro é pegando a pasta de seu projeto, e arrastando até o icone do LÖVE até aparecer "Abrir com LÖVE 11.4".

A outra forma requer que você utilize do terminal do windows:

  • [ 1 ] primeiro abra seu terminal do windows e digite "cmd" e aperte enter
  • [ 2 ] Após isso, utilize os comandos do terminal para "entrar" dentro da pasta de seu projeto. Exemplo cd desktop/meuProjetoLove
  • [ 3 ] Feito isso, digite love . e seu projeto será executado.

Eu como um desenvolvedor que utilizo o LÖVE recomendo demais essa segunda opção, pois facilita na hora de encontrar bugs, ler logs de erros e "prints".

Estrutura de um projeto LÖVE

o LÖVE usa 2 arquivos principais para seus projetos, o "main.lua" e o "conf.lua":

  • main.lua é o arquivo principal de onde seu codigo começa a ser executado.
  • conf.lua é o arquivo de configuração do seu projeto, é lá que é definido tamanho de tela, titulo, icone da janela, pasta de save, modulos que serão utilizados entre outras configurações.

Para iniciar-se em um projeto novo, deve ser criado esses 2 arquivos dentro da pasta de seu projeto, apartir disso você pode criar pastas e scripts para seus assets e codigos.

Estrutura do main.lua

O arquivo main.lua deve serguir uma estrutura pré-definida:

function love.load()
    -- aqui será carregado variaveis, assets, e coisas onde seram executadas apenas na 
    -- inicialização do seu projeto 
end

function love.draw()
    -- essa função é executada a todo momento, é aqui onde são desenhados as imagens.
end

function love.update(dt)
    -- essa função é executada a cada novo frame, e conta com o "dt" ou delta time
    -- usada para representar a quantidade de tempo que passou desde a última chamada.
end

para o conf.lua é quase a mesma estrutura mas é utilizado apenas 1 callback:

function love.conf(w)
    w.window.width          = 1280 -- define a largura da tela
    w.window.height         = 720 -- define a altura da tela
    w.window.icon           = "assets/icon.png" -- define o icon que aparece na janela
    w.window.title          = "Titulo da janela"
    w.console               = true -- essa função caso desativado passará a não enviar logs para o console ou caso o projeto aberto direto com o love não irá abrir a janela de comando.
    w.identity              = "meuJogo" -- define um nome para a pasta de save do projeto
end

E para todos que querem ter uma base de como começar um projeto lua após todo o "setup", aqui um basico Hello world com um retângulo que aumenta de tamanho:

function love.load()
    size = 32
end

function love.draw()
    love.graphics.print("Hello world", 90, 90) -- escreve "hello world" em 90x e 90y
    love.graphics.rectangle("fill", 0, 0, size, size) -- desenha um retangulo nas coordenadas 0 e 0 e seta o tamanho para nossa variavel size
    
end

function love.update(dt)
    size = size + 1
end