2017-10-03 5 views
0

J'essaie de créer un jeu basé sur une grille hexagonale. J'ai quelques-uns des principes fondamentaux (implémentés en obtenant des voisins d'un hexagone puisque la bibliothèque ne l'a pas nativement et je l'ai fait pour que je puisse recolorer chaque hexagone individuel), mais je n'arrive pas à faire une chose:Modification des hexagones de voisinage en mode de remplissage "ligne"

Lorsque je survole un hexagone, les voisins qui l'entourent sont remplacés par le mode de remplissage de ligne (picture example) (supposé que ma souris est sur l'hexagone en haut à gauche), mais je n'arrive pas à trouver comment les remplacer quand j'ai arrêté de planer dessus.

Voici le code correspondant (poignées de vérifier si je suis planant au-dessus d'un hexagone et traite les voisins):

function love.update() 
    mx, my = love.mouse.getPosition() 
    if hexGrid:containingHex(mx, my)~=nil then --am I hovering over a hexagon? 
     local q,r=hexGrid:containingHex(mx, my).q,hexGrid:containingHex(mx, my).r -- get the position on the grid for the hexagon 
     local neighbors=hexGrid:neighbors(q,r) -- get neighbors of hexagon I'm hovering over 
     for dir, neighbor in pairs(neighbors) do -- loop through neighbor table 
      if neighbor ~=nil and hexes.getHexagon(hexGrid:getHex(neighbor.q,neighbor.r))["fill"]=="fill" then -- does neighbor exist and is their fill mode "fill"? 
       local neighborHexagon=hexGrid:getHex(neighbor.q,neighbor.r) -- get the hexagon from the grid 
       local neighborData=hexes.getHexagon(neighborHexagon) -- get it's data from a seperate dictionary (stores color data and fill mode data) 
       neighborData["fill"]="line" -- set fill mode to line 
      end 
     end 
    end 
end 

Répondre

0

Il y a deux façons que vous pourriez aller à faire, mais le plus facile (IMO) serait réinitialisé l'état de la tuile précédente à la fin de chaque image.

Une boucle mise à jour ressemblerait à quelque chose comme ceci:

-- Reference to the old tile position 
local oldhexagon 

function love.update() 
    mx, my = love.mouse.getPosition() 
    if hexGrid:containingHex(mx, my)~=nil then --am I hovering over a hexagon? 
     -- Check if you were previously over a tile 
     if oldhexagon then 
      -- Set old hexagon's fill mode to line 
     end 

     -- Get rid of the reference for next frame 
     oldhexagon = nil 

     -- etc. 

     oldhexagon = neighborData 
    end 
end 
+0

Je ne sais pas si vous avez mal compris mon problème. Celui sur lequel je plane ne change jamais (comme le montre l'exemple de la photo), seulement les voisins. Je veux que les ** voisins ** d'un hexagone reviennent pour se remplir quand j'ai arrêté de planer dessus. – Ducktor

+0

@Ducktor Donc, pour clarifier, vous voulez que les hexagones aient un mode de remplissage à moins que la souris ne soit dessus, alors il devrait être en ligne? – DavisDude