Communauté

Déplacement pathfin...
 
Notifications
Retirer tout

Déplacement pathfinding pixel par pixel Lua

1 Posts
1 Utilisateurs
0 Reactions
69 Vu
0
Début du sujet

Bonjour, 

Dans le guide FTL de Gamecodeur il est question de déplacement utilisant le pathfinding, bibliothèque Jumper.

Ce déplacement se fait en case par case. Très bien ça marche ! 👌 ! 

Je voudrais utiliser cette bibliothèque, Jumper, pour faire un déplacement fluide en pixel par pixel. 

Savez vous si il y a une manière d'utiliser la bibliothèque Jumper, pour obtenir un résultat adapté au mouvement pixel par pixel ? 

Ou faut il adapter le résultat du case par case ? Et si c'est le cas, quelqu'un serait il comment procéder ? 

Merci par avance 

 

Étiquettes du sujet
1 Réponse
0
Début du sujet

Bon en fait j'ai cru le problème plus compliqué qu'il ne l'était réellement.

Voici le 'love.update' initial qui permet le déplacement en case par case :

function loveupdate(dt)
  if depart == true then
    for i, perso in pairs(listPerso) do
        if perso.path ~= nil and perso.nodePosition <= perso.path:getLength() then
            PixelMove(perso, dt)
        end
    end        
  end  
end

 

Voici ce que j'ai fait :

function love.update(dt)
  if depart == true then
    for i,member in pairs(listPerso) do--pour le déplacement du perso avec le pathF
      if member.path ~= nil and member.nodePosition <= member.path:getLength() then
          member.timer = 0
          local colCasePathNext = member.path._nodes[member.nodePosition + 1]:getX()
          local ligCasePathNext = member.path._nodes[member.nodePosition + 1]:getY()
          local xCasePathNext = ((colCasePathNext - 1)*32)+16
          local yCasePathNext = ((ligCasePathNext - 1)*32)+16
          local dx = 0
          local dy = 0
          local dH = "" --direction horizontal
          local dV = "" --direction vertical
          member.Col = math.floor((member.x+16)/32) + 1
          member.Line = math.floor((member.y+16)/32) + 1          
          if (member.x+16) > xCasePathNext then
            dx = -1
            dH = "g"
          elseif (member.x+16) < xCasePathNext then           
            dx = 1
            dH = "d"
          end
          if (member.y+16) > yCasePathNext then
            dy =  -1
            dV = "h"
          elseif (member.y+16) < yCasePathNext then
            dy =  1
            dV = "b"              
          end
          member.x = member.x + (dt * member.speed * dx)
          member.y = member.y + (dt * member.speed * dy)
          local colTemp = math.floor(member.x/32) + 1
          local ligTemp = math.floor(member.y/32) + 1
            
          if (dH == "d" and (member.x+16) >= xCasePathNext) or (dH == "g" and (member.x+16) <= xCasePathNext) or (dV == "b" and (member.y+16) >= yCasePathNext) or (dV == "h" and (member.y+16) <= yCasePathNext) then
            member.x = (member.Col -  1) * 32
            member.y = (member.Line -  1) * 32              
            member.nodePosition = member.nodePosition + 1            
          end            
      end
    end    
  end  
end

 

Il y a peu-être plus simple mais ça marche.

Peut-être que je vais essayer de coder un effet de glisse dessus.

 

 

Répondre
Share:

Dialoguez avec les autres membres de la gamecodeur school.

Accédez maintenant à notre serveur Discord privé : Entraide, Game Jams, Partage de projets, etc.

Vous devez être membre de la Gamecodeur School Premium pour être autorisé à accéder au serveur.