Как создать анимацию ходьбы в LOVE 2D - PullRequest
8 голосов
/ 20 февраля 2012

Так что мне было интересно, как изменить изображение персонажа, которое я создал, в зависимости от того, какую клавишу я нажал / нажимаю?

В конечном итоге анимация ходьбы будет происходить, когда "d"(или любую из клавиш wasd), но затем он останавливается, когда только что нажата клавиша "d" и т. д. Все изображения уже созданы.

Я пробовал это, но это не такотработать:

function love.load()

    if love.keyboard.isDown("a") then
        hero = love.graphics.newImage("/hero/11.png")
    elseif love.keyboard.isDown("d") then
        hero = love.graphics.newImage("/hero/5.png")
    elseif love.keyboard.isDown("s") then
        hero = love.graphics.newImage("/hero/fstand.png")
    elseif love.keyboard.isDown("w") then
        hero = love.graphics.newImage("/hero/1.png")
    end

function love.draw()

    love.graphics.draw(background)
    love.graphics.draw(hero, x, y)

end

1 Ответ

21 голосов
/ 20 февраля 2012

Вы должны понимать, как работает LÖVE. Это (очень в основном) делает это:

love.load()       -- invoke love.load just once, at the beginning
while true do     -- loop that repeats the following "forever" (until game ends)
  love.update(dt) --   call love.update() 
  love.draw()     --   call love.draw()
end

Эта схема настолько часта, что у самого цикла есть имя - оно называется Игровой цикл .

Ваш код не работает, потому что вы используете love.load(), как если бы он был частью игрового цикла, но это не так. Он вызывается в начале, в течение первой миллисекунды или около того вашей программы, и никогда больше.

Вы хотите использовать love.load для загрузки изображений и love.update для их изменения:

function love.load()
  heroLeft  = love.graphics.newImage("/hero/11.png")
  heroRight = love.graphics.newImage("/hero/5.png")
  heroDown  = love.graphics.newImage("/hero/fstand.png")
  heroUp    = love.graphics.newImage("/hero/1.png")

  hero = heroLeft -- the player starts looking to the left
end

function love.update(dt)
  if     love.keyboard.isDown("a") then
    hero = heroLeft
  elseif love.keyboard.isDown("d") then
    hero = heroRight
  elseif love.keyboard.isDown("s") then
    hero = heroDown
  elseif love.keyboard.isDown("w") then
    hero = heroUp
  end
end

function love.draw()
  love.graphics.draw(background)
  love.graphics.draw(hero, x, y)
end

Приведенный выше код имеет определенную повторяемость, которую можно вычленить с помощью таблиц, но я специально упростил ее.

Вы также заметите, что я включил параметр dt в функцию love.update. Это важно, так как он вам понадобится, чтобы убедиться, что анимации работают одинаково на всех компьютерах (скорость, с которой вызывается love.update, зависит от каждого компьютера, а dt позволяет вам справиться с этим)

Тем не менее, если вы хотите делать анимацию, вы, вероятно, захотите использовать эту анимацию Lib или мой собственный .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...