Memento LUA & Love2D

 0
 0
Tps de lecture estimé:4 minutes 45 secondes

Voici une liste des différents codes source et syntaxes courantes utilisées dans le language LUA.
La majorité sont extraites du Module LUA du site gamecodeur

Rappels LUA : Syntaxes de base


chaînes

print("Blessure de : "..heros.name)
print("Vie : "..tostring(heros.vie))

comparaisons

== Est égal
~= N'est pas égal (est différent)

boucle décroissante

for compteur=10,0,­1 do
  print(compteur)
end

Itérateurs de Tables

  • Itération pour une table dont les index sont alphabétiques ou numériques ou les deux. L'affichage se fera dans un ordre indéfini.
    local table = {3, banane = "jaune", 10, pi = 3.14159, 17, fruit = "banane"}
    for key, valeur in pairs(table) do
    print(key, valeur)
    end
  • Itération pour une table dont les index sont uniquement numériques. L'affichage se fera dans un ordre croissant.
    local table = {3, banane = "jaune", 10, pi = 3.14159, 17, fruit = "banane"}
    for key, valeur in ipairs(table) do
    print(key, valeur)
    end

Love2D


Écran & Images

Écran

  • Définir la taille de la fenêtre

    love.window.setMode(1024, 768)
  • Afficher un texte à l'écran

    love.graphics.print(debugInfos, 0, 0) -- 0,0 indique la position du texte à l'écran
  • doubler la taille de l'affichage
    function love.draw ()
    ...
    love.graphics.scale(2,2)
    ...

Images

  • Obtenir la ​largeur​ d'une image
    largeurImage = image:getWidth()
  • Obtenir la ​hauteur​ d'une image
    hauteurImage = image:getHeight()
  • Obtenir les dimensions d'une image
    liveImgWidth,liveImgHeight = liveImg:getDimensions()
  • Afficher une image
    love.graphics.draw(variableImage, positionX, positionY, rotationRadian, echelleX, echelleY, origineOffsetX, origineOffsetY)

Divers

Gestion de l'application

  • Quitter l'application

    love.event.push('quit')
  • Exemple d'initialisation d'une application
    function love.load()
    ...
    -- changer le titre de l'application
    love.window.setTitle(APP_TITLE)
    -- changer l'icône de l'application
    local imgIcon = love.graphics.newImage('image/icon.png')
    love.window.setIcon(imgIcon:getData())
    -- changer la taille de la fenêtre
    love.window.setMode(800, 600)
    ...
    end

Créer un exécutable sous Windows

  1. En supportant que le répertoire contenant la totalité de votre jeu soit SuperJeu/, vous pouvez créer le fichier .love directement en utilisant la commande
    zip -9 -q -r SuperJeu.love
    vous pouvez aussi créer un fichier SuperJeu.zip avec un utilitaire de compression (par exemple 7zip) puis le renommer le fichier en SuperJeu.love

  2. Une fois votre jeu compressé dans un .love, vous pouvez créer un exécutable qui lancera directement votre jeu.
    Pour ce faire il faut ajouter le fichier .love à la fin du fichier love.exe qui vient avec l'archive .zip officielle de LÖVE. Le fichier en résultant est votre exécutable de jeu.
    Une fois que vous avez votre exécutable, vous pouvez compresser avec les autres fichiers DLL de LÖVE dans un .zip et le partager avec le monde.
    copy /b love.exe+SuperJeu.love SuperJeu.exe
    Vous pouvez aussi créer un fichier .bat (par ex. creer_exe_jeu.bat) avec le contenu suivant
    copy /b love.exe+%1 "%~n1.exe"
    puis déplacer SuperJeu.love sur le fichier .bat, il créera tout seul SuperJeu.exe, que vous pourrez utiliser pour la distribution.
    Cette méthode crée un jeu fusionné.

  3. Une fois le fichier SuperJeu.exe créé, il faut suffit d'utiliser un générateur de fichier d'installation pour créer un seul et unique fichier .exe permettant d'installer le jeu. Je vous conseille l'utilistaire InnoSetup, gratuit et très simple d'emploi. N'oublier pas d'y ajouter tous les fichiers nécessaires à l'exécution de Love2D.

Pour rappel, la liste des fichiers à distribuer pour qu'une application Love2D fonctionne est la suivante :

SDL2.dll
OpenAL32.dll
license.txt
DevIL.dll
love.dll
lua51.dll
mpg123.dll
msvcp110.dll
msvcr110.dll

N'oubliez pas d'y ajouter le fichier .exe crée à l'étape 2 (SuperJeu.exe)

Gestion des entrées utilisateur

  • intercepter une touche du clavier
    function love.update(dt)
    ...
    if love.keyboard.isDown ("right") then
    -- note: "right" is a string contant defined in https://love2d.org/wiki/KeyConstant
    objet.angle = objet.angle + parametres.rotation * 90 * dt
    end
    ...
    end
  • récuperer la position de la souris
    local x = love.mouse.getX()
    local y = love.mouse.getY()
    love.graphics.rectangle(x, y, 10,10)

Physique

Gravité & Inertie

  • déplacement selon un objet ayant un angle de rotation (en degré)
    function love.update(dt)
    ...
    angleRadian = math.rad(objet.angle)
    implusionX = math.cos (angleRadian) * objet.vitesse * dt
    implusionY = math.sin (angleRadian) * objet.vitesse * dt
    ...
    end

Son et musique

Son

  • charger et jouer un son
    -- le son se charge au fur et à mesure pour économiser la mémoire (utile pour les musiques)
    -- local sndJump = love.audio.newSource ("sons/sfx_movement_jump13.wav","stream")
    -- le son se charge immédiatement (utile pour les sons ponctuels)
    local sndJump = love.audio.newSource ("sons/sfx_movement_jump13.wav","static")
    local musCool = love.audio.newSource ("sons/cool.mp3","stream")
    -- active le mode loop sur la musique
    musCool:setLooping(true)
    function love.keypressed (key)
    if (key == "escape") then love.event.push('quit') end
    if (key == "up") then sndJump:play() end
    if (key == "s") then musCool:stop() end
    if (key == "p") then musCool:play() end
    if (key == "r") then
    if (musCool:isPlaying()) then
      musCool:pause()
    else
      musCool:resume()
    end
    end
    end

Polices et affichage

Polices

  • charger et afficher un texte dans une police donnée

    fontNormal = love.graphics.newFont("fonts/normal.ttf", 10)
    love.graphics.setFont(self.fontContent)
    love.graphics.print(debugInfos, 0, 0) -- 0,0 indique la position du texte à l'écran
  • calculer la taille d'un texte dans une police donnée
    pMessage = "PAUSE MENU"
    local w=love.font.getWidth(pMessage)
    local h=love.font.getHeight(pMessage)

Système

Fichiers

  • lire un fichier texte avec Love2D. Attention, les fonctions de lecture/écriture (I/O) provenant de LUA ne fonctionnent pas depuis un jeu fusionné en love2D.
    map = {}
    local filename = "levels/level1.txt"
    for line in love.filesystem.lines(filename) do
    map[#map + 1] = line
    end

Article précédent Article suivant