Déplacement pathfinding pixel par pixel Lua
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
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
- 262 Sujets
- 906 Posts
- 0 En ligne
- 45.6 {numéro}K Membres