Moteur pour Love2D
christever Il y a 3 ans Premium Pro0
Lua LOVE2D Page officielle

En ayant eu marre à chaque fois de réécrire le même code, tout en le modifiant pour afficher des animations, pour gérer les collisions, pour afficher du texte … je me suis lancer dans la création d’ un petit moteur maison.

voici pour l’ instant les premiers prémices ….

Embryon de « moteur maison » pour Love2D ( iunspiré un peu/beaucoup par HaxeFlixel)

La classe Sprite definit plusieurs variables :
self.x = 0 Position X du sprite ( 0 par défaut )
self.y = 0 Position Y du sprite ( 0 par défaut )
self.width = 0 Largeur du sprite ( 0 par défaut )
self.height = 0 Hauteur du sprite ( 0 par défaut )
self.image = nil image du sprite ( NIL par défaut )
self.animation = nil animation ( NIL par défaut )
self.currentAnimation = nil frame courante de l animation ( NIL par défaut )
self.frameRate = 0 framerate de l’ animation ( 0 par défaut )
self.currentFrame = 1 frame courrante ( 1 par défaut)
self.animed = false sprite animé ( Faux par défaut)
self.rotation = 0 rotation du sprite ( 0 par defaut )
self.scaleX = 1 echelle X ( 1 par defaut )
self.scaleY = 1 echelle Y ( 1 par defaut )
self.visible = true sprite visible ( VRAI par defaut )
self.dead = false sprite mort ( FAUX par défaut )

méthodes definit dand la classe Sprite :
self.loadGraphic(fichier image, animed, largeur, hauteur)
fichier image : fichier de l’ image
animed : true si animé, false sinon ( si pas renseigne, le sprite ne sera pas animé)
largeur : largeur de la frame
hauteur : hauteur de la frame

self:addAnimation(nomAnimation, frames, framerate) : Ajoute une animation
self:playAnimation(nomAnimation) : Joue une animation
nomAnimation : nom de l’ animation
frame : liste des frames composantes l’ animation( commence à 1)
framerate : par defaut 30/secondes

exemples :
self:loadGraphic(« /assets/images/spaceinvaders.png », false, 8, 8)
self:addAnimation(« play », {13})
self:playAnimation(« play »)

–> charge le fichier spaceInvader, en definissant animed sur false, largeur et hauteur de frame : 8
ajoute une animation nommée play, et le sprite sera le 13iem (pas besoin de préciser un framerate car pas animé)
ensuite on joue l’ animation play

self:loadGraphic(« /assets/images/spaceinvaders.png », true, 8, 8)
self:addAnimation(« play », {1, 2}, 2)
self:playAnimation(« play »)

–> charge le fichier spaceInvader, en definissant animed sur true, largeur et hauteur de frame : 8
ajoute une animation nommée play, et l animation sera basée sur le premier et deuxieme sprite, avec un framerate de 2
ensuite on joue l’ animation play

self:loadGraphic(« /assets/images/sprite_racing.png »)

–> charge e fichier sprite_racing.png. La hauteur et la largeur seront les dimensions de l’ image. Donc un seul sprite
pas besoin de définir une animation et de la jouer.

———————————————————————————————————————————————

Dans le module GAMEPLAY.LUA
all_sprites = {} : définit une liste pour y insérer les sprites (pas obligatoire, mais permet un draw et un update plus simple)
player = require(« /objects/player ») : on définit le joueur
player = Player:new() : nouvel instance du joueur
table.insert(all_sprites, player) : on insère le joueur dans la liste des sprites ( voir ci-dessus )

dans le love.draw()
sprites_draw(liste_sprite) : on dessine tous les sprites qui sont dans la table liste_sprite si il est marqué comme visible
( exemple : allien1.visible = true)
sprites_update(liste_sprite, dt) : on met à jour tous les sprites qui sont dans la table liste_sprite
Si le sprite est marque comme dead (exemple : allien1.dead = true) alors le sprite est supprimé

Si on n’ a pas mis les sprites dans la liste, il faudra faire un updat et un draw manuellement
allien2:update(dt) et allien2:draw() par exemple

Devlogs du projet

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.