En aquest tema, explorarem com utilitzar Lua per crear scripts en motors de joc. Lua és àmpliament utilitzat en la indústria dels videojocs gràcies a la seva simplicitat, flexibilitat i eficiència. Aprendrem a integrar Lua en motors de joc populars i a crear scripts que controlin diferents aspectes del joc.

Objectius del Tema

  • Entendre el paper de Lua en el desenvolupament de jocs.
  • Aprendre a configurar un entorn de desenvolupament amb un motor de joc que suporti Lua.
  • Escriure scripts Lua per controlar elements del joc.
  • Integrar i executar scripts Lua dins del motor de joc.

  1. Introducció a Lua en Motors de Joc

Per què Lua?

  • Simplicitat: Lua té una sintaxi senzilla i fàcil d'aprendre.
  • Rendiment: Lua és ràpid i eficient, ideal per a aplicacions en temps real com els jocs.
  • Integració: Lua es pot integrar fàcilment amb altres llenguatges i motors de joc.

Motors de Joc Populars que Utilitzen Lua

  • Unity: Tot i que Unity utilitza principalment C#, també suporta Lua a través de plugins.
  • Corona SDK: Un motor de joc que utilitza Lua com a llenguatge principal.
  • LOVE2D: Un motor de joc 2D que utilitza Lua.
  • CryEngine: Un motor de joc avançat que suporta Lua per a scripting.

  1. Configuració de l'Entorn

Instal·lació de LOVE2D

LOVE2D és un motor de joc 2D que utilitza Lua. És una bona opció per començar a aprendre scripting en motors de joc.

  1. Descarrega LOVE2D des del lloc oficial: LOVE2D Download
  2. Instal·la LOVE2D seguint les instruccions per al teu sistema operatiu.

Configuració de l'Editor de Codi

Recomanem utilitzar un editor de codi com Visual Studio Code amb l'extensió de Lua per a una millor experiència de desenvolupament.

  1. Descarrega Visual Studio Code: Visual Studio Code
  2. Instal·la l'extensió de Lua: Cerca "Lua" a la secció d'extensions i instal·la-la.

  1. El Teu Primer Script en LOVE2D

Estructura d'un Projecte LOVE2D

Un projecte LOVE2D típic conté almenys dos fitxers:

  • main.lua: El fitxer principal on s'inicia el joc.
  • conf.lua: Opcional, per configurar paràmetres del joc.

Exemple de main.lua

function love.load()
    love.graphics.setBackgroundColor(0.1, 0.1, 0.1) -- Canvia el color de fons
    love.window.setTitle("El Meu Primer Joc en LOVE2D") -- Canvia el títol de la finestra
end

function love.draw()
    love.graphics.setColor(1, 1, 1) -- Canvia el color de dibuix a blanc
    love.graphics.print("Hola, món!", 400, 300) -- Dibuixa text a la pantalla
end

Executar el Joc

  1. Guarda el fitxer main.lua en una carpeta.
  2. Obre un terminal i navega fins a la carpeta.
  3. Executa el joc amb la comanda: love .

  1. Control d'Elements del Joc

Moviment d'un Personatge

Afegirem moviment a un personatge utilitzant les tecles de direcció.

local player = { x = 400, y = 300, speed = 200 }

function love.update(dt)
    if love.keyboard.isDown("right") then
        player.x = player.x + player.speed * dt
    elseif love.keyboard.isDown("left") then
        player.x = player.x - player.speed * dt
    end
    if love.keyboard.isDown("down") then
        player.y = player.y + player.speed * dt
    elseif love.keyboard.isDown("up") then
        player.y = player.y - player.speed * dt
    end
end

function love.draw()
    love.graphics.setColor(1, 1, 1)
    love.graphics.rectangle("fill", player.x, player.y, 50, 50)
end

Explicació del Codi

  • love.update(dt): Aquesta funció s'executa cada fotograma i s'utilitza per actualitzar la lògica del joc. dt és el temps transcorregut des de l'últim fotograma.
  • love.keyboard.isDown(key): Comprova si una tecla està premuda.
  • love.draw(): Aquesta funció s'executa cada fotograma per dibuixar a la pantalla.

  1. Integració de Scripts Lua en Altres Motors

Unity amb Lua

Per utilitzar Lua en Unity, necessitaràs un plugin com MoonSharp o SLua.

Exemple amb MoonSharp

  1. Instal·la MoonSharp: Afegeix el plugin al teu projecte Unity.
  2. Crea un Script Lua:
    function update()
        print("Actualitzant des de Lua!")
    end
    
  3. Crea un Script C# per Executar Lua:
    using MoonSharp.Interpreter;
    
    public class LuaScript : MonoBehaviour
    {
        private Script luaScript;
    
        void Start()
        {
            luaScript = new Script();
            luaScript.DoFile("path/to/your/script.lua");
        }
    
        void Update()
        {
            luaScript.Call(luaScript.Globals["update"]);
        }
    }
    

Exercicis Pràctics

Exercici 1: Afegir Salt al Personatge

Modifica el codi del moviment del personatge per afegir la capacitat de saltar quan es prem la tecla "space".

Exercici 2: Crear un Joc de Pong

Utilitzant LOVE2D, crea un joc de Pong bàsic amb dues pales i una pilota.

Solucions

Solució Exercici 1

local player = { x = 400, y = 300, speed = 200, jumpHeight = -300, gravity = 500, yVelocity = 0, isGrounded = true }

function love.update(dt)
    if love.keyboard.isDown("right") then
        player.x = player.x + player.speed * dt
    elseif love.keyboard.isDown("left") then
        player.x = player.x - player.speed * dt
    end

    if love.keyboard.isDown("space") and player.isGrounded then
        player.yVelocity = player.jumpHeight
        player.isGrounded = false
    end

    player.y = player.y + player.yVelocity * dt
    player.yVelocity = player.yVelocity + player.gravity * dt

    if player.y >= 300 then
        player.y = 300
        player.yVelocity = 0
        player.isGrounded = true
    end
end

function love.draw()
    love.graphics.setColor(1, 1, 1)
    love.graphics.rectangle("fill", player.x, player.y, 50, 50)
end

Conclusió

En aquest tema, hem après com utilitzar Lua per crear scripts en motors de joc. Hem configurat un entorn de desenvolupament amb LOVE2D, escrit scripts per controlar elements del joc i explorat la integració de Lua en altres motors com Unity. Amb aquests coneixements, estàs preparat per començar a crear els teus propis jocs utilitzant Lua.

En el següent tema, explorarem com automatitzar tasques amb Lua, una habilitat útil tant en el desenvolupament de jocs com en altres àrees de programació.

© Copyright 2024. Tots els drets reservats