love2d простой обмен изображениями

Я совершенно новичок в Lua и Love2D и, вероятно, вообще не понимаю этих концепций. Ну, это туториал по Love2D, и я хочу изменить его так, чтобы, когда я нажимаю, например, "а" на клавиатуре, объект менялся (с хомяка на машину) и так далее.

Можете ли вы помочь мне?

-- 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

person molni    schedule 10.12.2013    source источник


Ответы (2)


Что ж, спасибо, Корбин, я понял это без локальной переменной «состояние». Ваше решение меня вдохновило. Теперь это работает.

  -- 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
person molni    schedule 10.12.2013

Я бы предложил использовать love.update только для обновления состояния. Не рисуйте в нем. Затем сделайте весь свой рисунок в love.draw. Решение может быть:

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
person Corbin March    schedule 10.12.2013
comment
Спасибо, Корбин, но это не работает, у меня ошибка, связанная с локальным состоянием. rror: main.lua:12: попытка проиндексировать upvalue 'state' (нулевое значение) трассировка стека: main.lua:12: в функции 'load' [string boot.lua]:378: в функции ‹[string boot. lua]:373› [C]: в функции 'xpcall' - person molni; 10.12.2013
comment
Упс. Непроверенный код. Рад, что указал вам правильное направление. - person Corbin March; 10.12.2013
comment
Спасибо. Теперь я собираюсь определить границы экрана, чтобы изображение не выпадало за пределы экрана. - person molni; 11.12.2013