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
Petit jeu sans aucune prétention. Il m’ a juste permis de mettre en œuvre un « moteur » maison pour Love2d / Lua. Les sources sont disponibles. Le « moteur » en lui-même se…
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…