Necrown - Devlog #11 [Engine Dev] : Texte et images
Splix Il y a 7 mois Premium Pro - Adhésion à vie0

Salut les gamecodeurs et gamecodeuses!!!

Aujourd’hui nous allons passer encore un peu de temps sur l’engine, mais rassurez vous nous en avons bientôt fini 😉 Nous allons créer un nouveau fichier, graphics, qui gérera les éléments graphiques du jeu. Pour ne pas trop perdre de temps, je ne vais pas m’attarder sur l’objet fonts, qui va enregistrer l’ensemble des polices utilisables dans le jeu, ou encore l’objet color, réalisé à l’aide de notre système POO, et qui permet de gérer, comme son nom l’indique, des couleurs… Je ne m’attarderai pas non plus sur l’objet cursors, car on ne l’utilisera certainement pas avant longtemps. Mais nous allons parler un peut de la classe text:

text = class.new("text"):extend("object")

function text:new(p_msg, p_font)
  local obj = self:create()
  obj.msg = p_msg
  obj.font = p_font or "arial"
  obj.img = love.graphics.newText(fonts[obj.font], obj.msg)
  obj.w = obj.img:getWidth()
  obj.h = obj.img:getHeight()
  obj.x = 0
  obj.y = 0
  obj.ox = 0
  obj.oy = 0
  obj.r = 0
  obj.color = nil
  obj.bgColor = nil
  obj.fixed = false
  
  return obj
end

function text:setMsg(p_msg)
  self.msg = p_msg
  self.img:set(self.msg)
  self.w = self.img:getWidth()
  self.h = self.img:getHeight()
end

function text:draw()
  local x = self.fixed and self.x or self.x - camera.x
  local y = self.fixed and self.y or self.y - camera.y
  
  local clearColor = false
  if self.bgColor then
    self.bgColor:set()
    clearColor = true
    love.graphics.rectangle("fill", x - self.ox - 2, y - self.oy, self.w + 4, self.h)
  end
  
  if self.color then
    self.color:set()
    if not clearColor then clearColor = true end
  elseif clearColor then
    color.clear()
    clearColor = false
  end
  
  love.graphics.draw(self.img, x, y, self.r, 1, 1, self.ox, self.oy)
  if clearColor then color.clear() end
end

Cet objet nous permet d’afficher du texte. Nous allons l’utiliser de suite pour afficher des informations lorsque l’on est en debug mode, il suffit pour cela de créer des objets text dans game.manager, et quelques lignes de code plus tard on peut afficher la version du jeu, de love, les fps, et n’importe quelle info que l’on souhaite afficher, simplement en appuyant sur le contrôle debug lorsque l’on est en inDev:

Voila pour l’objet text, qui nous permettra aussi d’afficher du texte in game. Je vous passe pour ne pas traîner la classe image, qui permet de charger des images, et qui est local au fichier. Le chargement d’images dans le jeu se fera via l’objet images, qui enregistrera la liste de toutes les images en leur attribuant une clé:

images = {}

function images.add(p_a, p_b)
  local src = (p_b == nil) and p_a or p_b
  local key = (p_b == nil) and "" or p_a
  
  if key == "" then
    local items = string.split(src, "/")
    local s, _ = string.find(items[#items], "%.")
    key = string.sub(items[#items], 1, s - 1)
  end
  
  assert(images[key] == nil, "Duplicate key in images : "..key)
  images[key] = image:new(src)
end

function images.importAll(p_dir)
  if love.filesystem.getInfo(p_dir , "directory") then
    for _, v in pairs(love.filesystem.getDirectoryItems(p_dir)) do
      images.importAll(p_dir.."/"..v)
    end
  elseif love.filesystem.getInfo(p_dir) then
    images.add(p_dir)
  end
end

Deux point sont intéressants ici. Premier point: On peu ne fournir que le chemin de l’image, et c’est son nom qui servira de clé dans la liste. Deuxième point: La fonction images.importAll, qui nous permettra d’importer l’ensemble des images d’une arborescence en un appel (mais dans ce cas évidement les clés seront attribués en fonction des noms des fichiers). Ce système nous permettra d’importer et de gérer nos images facilement, il ne nous reste qu’à laisser parler notre âme d’artiste et créer un visuel sympa pour notre jeu…

Nous allons également créer un fichier audio qui gérera l’ajout de musiques et de sons, mais le principe restera le même que pour les images, ce pourquoi on ne s’y attardera pas non plus. Voila, maintenant nous avons un moteur plutôt complet, permettant de gérer les sauvegardes, de créer des objets comme en POO, d’afficher des images, jouer des musiques et des sons… Évidemment il évoluera sans doutes encore au fil du développement, mais nous avons une base solide et nous allons enfin pouvoir commencer notre travail sur ce qui nous intéresse le plus: Le jeu!!!

Mais il va falloir être un peu patient encore. Non ne me jetez pas de pierres! Promis nous ne verrons plus de devlog sur le développement de l’engine avant longtemps, mais je part en congés ce soir même, et j’ai prévu (même si je ne suis pas sur d’y parvenir) de décrocher un peu de mon ordinateur. Toutefois je peu déjà vous dire que le prochain devlog sera consacré au game concept, une étape importante lorsque vous voulez créer un jeu de façon efficace, et dès les devlogs suivant, nous commenceront à travailler sur le jeu en lui même!

Je vous dis à dans trois semaines, et d’ici là… Bon code à tous et à bientôt!!!

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.