
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