Vous lisez 0 fil de discussion
  • Auteur
    Messages
    • #64050
      Edas-Jonovo
      Participant

      Code de mon exercice animation du personnage dans un décors.

      love.graphics.setDefaultFilter("nearest")
      
      local Hero = {}
      
      function CreaPerso()
        local MonHero = {}
        
        MonHero.x = 0
        MonHero.y = 0
        MonHero.Images = {}
        local n
        for n=1,2 do
          local MonImg  = love.graphics.newImage("hero-day-"..n..".png")
          table.insert(MonHero.Images,MonImg)
         end
        MonHero.currentImage = 1
        MonHero.width = MonHero.Images[1]:getWidth()
        MonHero.height = MonHero.Images[1]:getHeight()
        return MonHero
      end
      
      function love.load()
       
        img = love.graphics.newImage ("fond.jpg")
        largeur = love.graphics.getWidth() /2
        hauteur = love.graphics.getHeight() 
        Hero = CreaPerso ()
      
        Hero.x = largeur
        Hero.y = hauteur
      end
      
      function love.update (dt)
        Hero.currentImage = Hero.currentImage + 4*dt
        
        if Hero.currentImage >= #Hero.Images +1 then
          Hero.currentImage = 1
        end
      end
      
      function love.draw ()
        
        local FrameArrondi = math.floor(Hero.currentImage)
        love.graphics.draw(img,0,0)
        love.graphics.draw(Hero.Images[FrameArrondi],Hero.x - Hero.width/2,Hero.y -Hero.height,0,3,3, Hero.width/2,Hero.height/2)
        end

      J’en es chiez je peut vous le dire lol

      (Si j’ai des fautes en termes de compréhension, si vous pouvais me le dire ^^)

      Je me suis aider du cours de David sur le moteur sonore dans les cours de Lua avec l’exemple d’un jeu en scrolling horizontale.
      en démontant son code pour ne garder que les lignes que j’ai besoin.
      l’animation du personnage et le positionner ou je le souhaite.
      en copiant et en modifiant les variables avec mes propre nom.

      J’ai appris qu’on pouvais appeler plusieurs images sur une seul ligne de code, pour le mettre dans une liste qui sert à l’animation.

      for n=1,2 do
          local MonImg  = love.graphics.newImage("hero-day-"..n..".png")
          table.insert(MonHero.Images,MonImg)
         end

      ont insert donc dans la table MonHero.Image, la variable contenant les ressources images (MonImg)
      qui ce repete dans une boucle for.
      ce qui fait plus propre je trouve personnellement.

      Ensuite j’ai était bloqué bien avant de m’aider du code de David.
      Le code fonctionner mais il y avais un bug au niveau de l’origine, des que j’agrandissais l’image, son origine changeais et au lieu de rester au milieux de l’image elle ce décaler.

      Ancien code source :

      love.graphics.setDefaultFilter("nearest")
      
      Hero = {}
      Hero.x = 0
      Hero.y = 0
      Hero.Frame = 1
      Hero.Images = {}
      
      function love.load ()
       Hero.Images [1]= love.graphics.newImage("hero-day-1.png")
       Hero.Images [2]= love.graphics.newImage("hero-day-2.png")
       
       Largeur = love.graphics.getWidth ()
       Hauteur = love.graphics.getHeight ()
      end
      
      function love.update (dt)
        Hero.Frame = Hero.Frame + 4*dt
        
        if Hero.Frame >= #Hero.Images + 1 then
          Hero.Frame = 1
        end
      end
      
      function love.draw ()
      local AnimationFrame = math.floor(Hero.Frame)
      
      love.graphics.draw(Hero.Images[AnimationFrame], Largeur/2 - Hero.Images[AnimationFrame]:getWidth () /2,Hauteur /2 - Hero.Images[AnimationFrame]:getHeight() /2)
        
      end

      ligne du bug apres modication :

      love.graphics.draw(Hero.Images[AnimationFrame],Largeur/2-Hero.Images[AnimationFrame]:getWidth()/2,Hauteur/2-Hero.Images[AnimationFrame]:getHeight()/2,0,3,3)

      Du coup en m’aident du code source de David sur l’exemple du jeu en scrolling horizontale j’ai pu réglais mon problème ^^

      • Ce sujet a été modifié il y a 2 années et 4 mois par Edas-Jonovo. Raison : Faute rectifier
Vous lisez 0 fil de discussion
  • Vous devez être connecté pour répondre à ce sujet.