Ir al contenido principal

Quiéres estos diseños en tu ropa o en diferentes productos?

Publicidad

Guía básica para iniciarse en Love2D y Lua

logo love2d


 Un saludo a todos, tengo un tiempo practicando con el motor de juegos Love2D y me parece muy agradable y bastante simple de utilizar además de ser de código abierto, con él es posible desarrollar juegos muy interesantes y prototipos bastante rápido, el uso del lenguaje de programación Lua facilita aún más la construcción de juegos por ser este un lenguaje bastante fácil de aprender además de eficiente y con muchas capacidades. Así que hoy me animo a ayudar a todos aquellos que estén interesados en aprender a utilizar este motor de juegos que quieran iniciarse en el uso de Love2D y Lua, así que veamos los primeros pasos.

Primeramente nos descargamos el motor de juegos e instalamos en nuestro sistema, dirigiéndonos a la página de Love2D. Una vez instalado ya podemos comenzar a construir nuestros juegos.

Elegimos el editor que más nos guste, en la página de Love2D nos nombran algunos como ZeroBrane Studio, SublimeText, Notepad++, SciTE. Y Aquí puedes encontrar como configurarlos para usarlos con el motor de juegos. Yo estaré utilizando Sublime text.

Como todo lenguaje de programación podemos escribir nuestro código en varios archivos de texto, pero siempre hay uno que es el inicio o la entrada principal de nuestro programa, en love2d este archivo se debe llamar main.lua, si intentamos ejecutar el motor de juegos pasándole como parámetro la carpeta de trabajo y no consigue un archivo main.lua el programa nos mostrara un error. Así que lo primero que debemos hacer es crear este archivo en la carpeta donde tendremos todos los recursos y código de nuestro juego. Además de este archivo principal Love2D utiliza un archivo llamado conf.lua, no es necesario que lo creemos para probar o practicar con el motor de juegos, pero si es necesario para configurar algunos valores iniciales una vez tengamos nuestro juego más completo, más adelante te lo explicaré.

carpetas y archivos de un juego love2d

Estructura del código principal

La estructura del archivo main.lua es el siguiente: 

main.lua

function love.load()

end

function love.update(dt)

end

function love.draw()

end

Orden de llamada de las funciones principales

El orden de llamada de estas funciones por el motor de juegos es el siguiente, load(), update(), draw(), update(), draw(), ... Y así indefinidamente hasta que el juego sea detenido. Como podrás ver load() solo es llamado una vez al inicio, y luego solo se ejecutan update() y draw() en ese orden.

La función load() es utilizada solamente una vez al inicio del programa, y es utilizada para iniciar las variables del código así como cargar las imágenes y cualquier recurso que necesitemos.

La función update() nos permite agregar el comportamiento de nuestro juego, es decir, aquí ocurrirá la lógica de nuestro programa, el movimiento de nuestro personaje, el manejo de las colisiones, el sonido, etc. Podrás ver que la función posee un parámetro llamado dt que se refiere a delta-time es decir el tiempo que transcurrió desde la última vez que la función update() fue llamada.

Y dentro de la función draw() escribiremos todos los comandos de dibujado del juego, dibujar al jugador, el fondo, las explosiones, etc.

Vamos a ver un ejemplo muy simple para aclarar las dudas y comprender mejor como todas estas funciones actúan en conjunto.

Ejemplo

Haremos que un rectángulo se mueva a través de la pantalla y al llegar a los límites de la ventana cambie su dirección, verás que con este simple ejemplo entenderás como empezar a usar a Love2D.

Iniciando las variables 

Para representar el rectángulo utilizaremos las siguientes variables, para la posición rectX, rectY y para su ancho rectW y alto rectH, para las velocidades rectVX y rectVY. También será necesario conocer el tamaño de la ventana de nuestro juego utilizando estos nombres, para el ancho scrW y alto scrH.

El código de la función load() queda de la siguiente manera:

function love.load()

    rectX = 0
    rectY = 0
    rectW = 30
    rectH = 30
    rectVX =50
    rectVY =50
    scrw = love.graphics.getWidth()
    scrH = love.graphics.getHeight()

end

Agregando la lógica del juego

Dentro de la función update() debemos agregar el código que permita mover el rectángulo a través de la pantalla y que tan pronto el rectángulo llegue a los límites de la ventana cambie de dirección, esa será la lógica. Para realizar los cálculos debemos conocer en que posición se encuentran las esquinas de nuestro rectángulo y compararla con el valor máximo de cada lado de la ventana.

Si la posición "x" de la esquina superior izquierda del rectángulo es menor que 0 quiere decir que el rectángulo llego al límite izquierdo de la ventana, y en ese caso cambiamos la dirección. Así haremos con cada coordenada de la figura.

function love.update()

    if rectX < 0 or (rectX + rectW) > scrW then
        rectVX = rectVX * (-1)
    end
    if rectY < 0 or (rectY + rectH) > scrH then
        rectVY = rectVY * (-1)
    end

    rectX = rectX + rectVX * dt
    rectY = rectY + rectVY * dt

end
 

Como usar delta time (dt) en Love2D para el movimiento del jugador

Como ves para mover al rectangulo debemos sumarle constantemente la velocidad a las coordenadas rectX y rectY, de esa manera cada vez que sea llamado la función update() se actualizará la posición de la figura.
 
Notarás que utilizo el parámetro dt para el movimiento, para entender a que se debe esto tienes que comprender lo siguiente, cada vez que update() y luego draw() son llamados, de acuerdo a la complejidad del código dentro de ellos y la potencia del CPU, se tardara más o menos tiempo en terminar y volver a llamar a update(), debido a que este tiempo entre llamadas a update() es variable y queremos que el movimiento de nuestro jugador sea lo más fluido y constante posible utilizamos dt para calcular el incremento correspondiente en el momento del cálculo de acuerdo a la velocidad que elegimos y la velocidad con que el juego se está ejecutando, veamos un ejemplo.

Si en el juego se está ejecutando la función update() 50 veces por segundo, donde el promedio de dt sería 0.02 segundos (1/50) y queremos que la figura se mueva 50 píxeles por segundo entonces al multiplicar 50 * dt obtenemos que cada vez que update() sea llamado la figura se moverá 1 píxel (50 * 0.02) completándose los 50 píxeles al cabo de 1 segundo, el valor de 1 píxel es el que utilizamos al momento de sumar rectX = rectX + recVX * dt. La ventaja de esto es que sin importar cuál sea la cantidad de veces que sea llamado update() por segundo, sean 60 fps, 80 fps o 100 fps, la figura se moverá 50 píxeles cada segundo.

Dibujando el juego

En este caso es bastante simple el dibujado del juego, pues solo será el rectángulo. El comando de dibujado es el siguiente, love.graphics.rectangle("modo",x,y,w,h), modo se refiere a si queremos que se dibuje solo el borde de la figura, se escribe "line", o si será un rectángulo relleno "fill", ya te imaginaras los otros 4 parámetros "x,y,w,h" que se refieren a la posición de la figura "x,y" y su tamaño "w,h".
El color con que se dibujará es definido por el comando love.graphics.setColor(r,g,b,a), los valores de "rgba" van de 0 a 1, pueden ser 0.1, 0.2,... Hasta el 1. "r" sería el valor del rojo, "g" el valor del verde y "b" el valor del azul, "a" se refiere a la transparencia.

El código quedará así.

function love.draw()

    love.graphics.setColor(1,1,1,1)
    love.graphics.rectangle("line",rectX,rectY,rectW,rectH)

end

Y listo, ya tenemos el ejemplo completo. Para ver nuestro ejemplo en acción todo dependerá de que editor estás utilizando. Si usas Sublime text con teclear ctrl+b se ejecutara tu código y verás la ventana de Love2D en funcionamiento, si tuviste algún error la ventana mostrara el error conseguido.

También podrías comprimir todos los archivos de tu juego como juego.zip y luego renombrarlo como juego.love y hacer doble clic en este último para ejecutarlo.

Otra manera es a través del terminal en Linux o la consola de Windows, escribiendo lo siguiente: 
 
en Windows, "C:\Program Files\LOVE\love.exe" "C:\Juegos\carpetaDelJuego"
en Linux, love "home/nombreUsuario/juegos/carpetaDelJuego"

De igual manera obtendremos el mismo resultado que será el siguiente:


Culminamos por ahora esta guía básica que espero haya sido bastante útil, próximamente agregaré más contenido relacionado con Love2D explicando como usar las imágenes y el audio, así que hasta la próxima.
 

Comentarios