1
votes

I'm totally new to Lua and Love2D and probably do not understand the concepts at all. Well this is a Love2D tutorial, and I want to change it so when I press "a", for example, on the keyboard, the object will exchange (from hamster to car) and so on.

Can you help me out?

-- Tutorial 1: Hamster Ball
-- Add an image to the game and move it around using
-- the arrow keys.
-- compatible with löve 0.6.0 and up

function love.load()
   hamster = love.graphics.newImage("hamster.png")
   auto = love.graphics.newImage("auto.png")
   x = 50
   y = 50
   speed = 300
end

function love.update(dt)
   if love.keyboard.isDown("right") then
      x = x + (speed * dt)
   end
   if love.keyboard.isDown("left") then
      x = x - (speed * dt)
   end

   if love.keyboard.isDown("down") then
      y = y + (speed * dt)
   end
   if love.keyboard.isDown("up") then
      y = y - (speed * dt)
   end
   if love.keyboard.isDown("escape") then
      love.event.quit()
   end
   if love.keyboard.isDown("a") then
      love.draw(auto,x,y)
   end
end

function love.draw()
   love.graphics.draw(hamster, x, y)
end
2

2 Answers

0
votes

Well thanks Corbin, i figured it out without "state" local variable. Your solution was inspiring to me. Now it's working.

  -- Tutorial 1: Hamster Ball
    -- Add an image to the game and move it around using
    -- the arrow keys.
    -- compatible with löve 0.6.0 and up


    function love.load()
       hamster = love.graphics.newImage("hamster.png")
       auto = love.graphics.newImage("auto.png")
       activeImage = hamster
       activeImageName = "hamster"
       x = 50
       y = 50
       speed = 300
    end

    function love.update(dt)
       if love.keyboard.isDown("right") then
          x = x + (speed * dt)
       end
       if love.keyboard.isDown("left") then
          x = x - (speed * dt)
       end

       if love.keyboard.isDown("down") then
          y = y + (speed * dt)
       end
       if love.keyboard.isDown("up") then
          y = y - (speed * dt)
       end
       if love.keyboard.isDown("escape") then
          love.event.quit()
       end
       if love.keyboard.isDown("a") then
          activeImage = auto
          activeImageName = "auto"
       end
       if love.keyboard.isDown("h") then
          activeImage = hamster
          activeImageName = "hamster"
       end

    end

    function love.draw()
       love.graphics.draw(activeImage, x, y)
    end
0
votes

I'd suggest using love.update to only update state. Don't draw in it. Then do all of your drawing in love.draw. A solution might be:

local state = {}

function love.load()
    hamster = love.graphics.newImage("hamster.png")
    auto = love.graphics.newImage("auto.png")
    state.activeImage = hamster
    state.activeImageName = "hamster"
    -- <snip> ...
end

function love.update(dt) 
    -- <snip> ... 
    if love.keyboard.isDown("a") then
        if state.activeImageName == "hamster" then
            state.activeImage = auto
            state.activeImageName = "auto"
        else
            state.activeImage = hamster
            state.activeImageName = "hamster"
        end
    end
end

function love.draw()
   love.graphics.draw(state.activeImage, x, y)
end