Memento LUA & Love2D

Estimated reading time:4 minutes 30 seconds
programmation développement lua love2D

Memento LUA & Love2D

Voici une liste des différents codes source et syntaxes courantes utilisées dans le language LUA.

Références/Sources:

LUA : Syntaxes de base

chaînes

  print("Blessure de : "..player.name)
  print("Vie : "..tostring(player.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

L'affichage

  • Connaître la résolution de l'écran

    TODO
  • Changer la taille de la fenêtre

    love.window.setMode(1024, 768)
  • doubler la taille de l'affichage

    function love.draw ()
    ...
    love.graphics.scale(2,2)
    ...
  • Passage en plein écran ou mode fenêtré

    --TODO

Les Images

  • Afficher une image
    A mettre dans la fonction draw()

    love.graphics.draw(variableImage, positionX, positionY, rotationRadian, echelleX, echelleY, origineOffsetX, origineOffsetY)
  • Effets sur les images

    • Effectuer un effet miroir horizontal :
    --TODO
    • Changer la teinte d'une image
    --TODO
    • Ajouter de la transparence (Alpha) à une image
    --TODO
  • 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()

Les sprites

  • Gérer des listes de sprites

    --TODO

Les Polices de caractères

  • 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)

Les Textes

  • 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

Le GamePlay

Le Delta time

TODO

Gestion des entrées utilisateur

Le clavier

  • 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

La souris

  • Afficher le curseur de la souris
  --TODO
  • Connaître l'état des boutons de la souris
  --TODO
  • Connaître la position de la souris
local x = love.mouse.getX()
local y = love.mouse.getY()
love.graphics.rectangle("fill", x, y, 10,10)

Physique

Gravité & Inertie

  • déplacement selon un objet ayant un angle de rotation (en degré)

    function love.update(dt)
    ...
    angleRad = math.rad(object.angle)
    speedX = math.cos (angleRad) * object.speed * dt
    speedY = math.sin (angleRad) * object.speed * dt
    ...
    end

L'audio

Son & Musique

  • charger et jouer un son ou une musique

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

Système

Fichiers

  • lire un fichier texte (avec Love2D)
    NOTE : 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

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

Publication

Sous Windows
  • 1 En supportant que le répertoire contenant la totalité de votre jeu soit Game/, vous pouvez créer le fichier .love directement en utilisant la commande

    zip -9 -q -r Game.love

vous pouvez aussi créer un fichier Game.zip avec un utilitaire de compression (par exemple 7zip) puis le renommer le fichier en Game.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+Game.love Game.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 Game.love sur le fichier .bat, il créera tout seul Game.exe, que vous pourrez utiliser pour la distribution.
Cette méthode crée un jeu fusionné.

  • 3 Une fois le fichier Game.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 (Game.exe)

Sous Android

TODO

Sous IOS

TODO

Sous MacOS

TODO

Sous Linux

TODO

Next Post Previous Post