History: Crea juegos con Love2d

Revision made 7 years ago by Jakub Janarek. Go to the last revision.

Love2d o LÖVE es un framework, o un conjunto de funcionalidades, que permite hacer juegos chulísimos con Lua, y su fuerte son los juegos de plataformas o en 2d. Es simple, es potente, y también mola impresionar a tus amigos con un clon de Mario Bros, que vamos a hacer aquí.

Para aprovechar el tutorial, descárgate Love2d en https://love2d.org/ y para escribir los programas, si no tienes un Linux o macOS, la cosa se hace más sencilla con el programa Zerobrane, que lleva Lua preinstalado:

https://studio.zerobrane.com/download

Si no sabes Lua, te recomiendo nuestro curso en Libre University:

https://es.libre.university/lesson/B1Pll0oCg

Una vez que tengas todo, empieza a darle caña al framework.

3...2...1, ¡ya!

Funciones elementales

El juego más básico en Love es un archivo main.lua ubicado en una carpeta que puede tener otros archivos de Lua, imágenes, música para el juego. En esencia la estructura de un main.lua es:

function love.load()
  -- aquí creamos todos los objetos del juego
end

function love.update() 
  -- love.update() puede tomar un parámetro de tiempo dt
  
  -- aquí cambiamos el estado de los objetos
  -- es la lógica interna del juego
end

function love.draw()
  -- aquí dibujamos los objetos en pantalla
end

Estas funciones son ejecutadas automáticamente por Love en ciertos momentos, y se llaman callbacks, literalmente "llamadas al revés", porque  a esas funciones no las llamamos nosotros en ningún momento, pero sí las llama el programa. Hay algunas más, como love.mousepressed, love.keyreleased, love.quit, y love.focus. Al usarlas, el juego se hace más simple de programar, úsalas.

El tema de paquetes

El love.bla viene de que tenemos que importar la función de Love, no la hacemos nosotros desde 0 que digamos. No sé si te acuerdas, pero en la clase de Lua vimos una función, io.write, que escribía el texto en la pantalla o consola. Era, en realidad, la función write del paquete io, de entrada y salida de texto.

Lua tiene algunos paquetes incluidos, tipo math, table, io, y podemos instalar librerías externas como Love, ampliando así las posibilidades del lenguaje. Por cierto, Love también tiene subpaquetes de física, cálculo, manipulación de imágenes, texto, pero ya me estoy adentrando demasiado :)

Ejecuta programas, no personas

Escribir código no sirve de nada, si no se ejecuta o usa. Para ejecutar nuestro primer programa de Love completa la función love.draw del programa base con:

function love.draw()
    love.graphics.print('¡Love2d mola mazo!', 500, 400)
end

Una vez escrito, guarda el programa como "main.lua", entra con la consola en el directorio del juego si estás en linux o mac, y escribe:

$ love .

Sin el símbolo del dólar, que aclaro para los de windows que es el símbolo del shell :) Así, te aparecerá una ventana negra de 500 por 400 píxeles, con la frase que pasamos a la función como primer argumento. El programa se habrá ejecutado.

Con windows, pulsa con botón derecho en el archivo, y dale click a "abrir con love". Al abrirlo con amor te saldrá la ventana igual que en los casos anteriores.

Hagamos nuestro juego de plataformas

O de como nos copiamos descaradamente de Mario Bros.

Vayamos desarrollando el juego paso a paso. El código final y los materiales necesarios se hallan en:

https://github.com/jxub/lua-workshop

Luego de bajarnos el .zip, creamos la estructura de carpetas donde queramos:

/lua-workshop
  /sprites
    (nos copiamos las imágenes aquí)
  main.lua
  player.lua
  platfrom.lua

Links interesantes

la wiki oficial: https://love2d.org/wiki/Main_Page

funciones callback en español: https://love2d.org/wiki/Tutorial:Callback_Functions_(Espa%C3%B1ol)

como empaquetar el juego en un ejecutable: https://love2d.org/wiki/

un huevo de tutoriales: https://love2d.org/wiki/Category:Tutorials

otra guía de love, mejor que la mía: http://nova-fusion.com/2011/06/14/a-guide-to-getting-started-with-love2d/

tutorial de otro juego de pltaformas en Love: http://osmstudios.com/tutorials/love2d-platformer-tutorial-part-1-the-basics