title: Love2d / LUA grid locked movement NO DIAGONAL
body: <p>I thought this would be a common problem but after days of research I can't find a solution. Very new to programming in general and LUA specifically. I'm building a SUPAPLEX clone as a CS50 personal project: the character moves along the grid based map and there's a code that everyone seems to suggest (attached). On release of arrow buttons the movement is continued until the end of a tile, smoothly. But if 2 movement buttons are pushed, it causes brief diagonal movement and that's the problem I'm unsuccessfully trying to solve.</p>
  <p>Basically I'm trying to either ignore any input until the movement of the sprite is finished at the end of the grid tile or prevent updating until movement in one direction is complete. Seems like a simple thing but I'm about to give up this whole thing. Frustrating. Any input is hiiiighly appreciated and I'm sure this would be a lot of help for very many people...</p>
  <pre><code>function love.load()
  
      love.keyboard.setKeyRepeat(true)
  
      player = {
          grid_x = 256,
          grid_y = 256,
          act_x = 256,
          act_y = 256,
          speed = 5,
      }
  
      map = {
          { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
          { 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
          { 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1 },
          { 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1 },
          { 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1 },
          { 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
          { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
          { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
          { 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
          { 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1 },
          { 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
          { 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
          { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
      }
  
      
      function testMap(x, y)
          if map[(player.grid_y / 32) + y][(player.grid_x / 32) + x] == 1 then
              return false
          end
          return true
      end
  
  
      function love.keypressed(key)
          if key == &quot;up&quot; then
              player.grid_y = player.grid_y - 32
          elseif key == &quot;down&quot; then
              player.grid_y = player.grid_y + 32
          elseif key == &quot;left&quot; then
              player.grid_x = player.grid_x - 32
          elseif key == &quot;right&quot; then
              player.grid_x = player.grid_x + 32
          end
      end
  
  end
   
  function love.update(dt)
      player.act_y = player.act_y - ((player.act_y - player.grid_y) * player.speed * dt)
      player.act_x = player.act_x - ((player.act_x - player.grid_x) * player.speed * dt)
  end
   
  function love.draw()
      love.graphics.rectangle(&quot;fill&quot;, player.act_x, player.act_y, 32, 32)
      for y=1, #map do
          for x=1, #map[y] do
              if map[y][x] == 1 then
                  love.graphics.rectangle(&quot;line&quot;, x * 32, y * 32, 32, 32)
              end
          end
      end
  end
  </code></pre>