Déplacement pathfinding pixel par pixel Lua
![Sansucre Sansucre](http://www.gamecodeur.fr/wp-content/uploads/wpforo/avatars/muchembled_45171.jpeg)
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
![Sansucre Sansucre](http://www.gamecodeur.fr/wp-content/uploads/wpforo/avatars/muchembled_45171.jpeg)
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.
- 6 Forums
- 251 Sujets
- 886 Posts
- 0 En ligne
- 45.6 {numéro}K Membres