如何在LOVE 2D中创建行走动画

我想知道如何根据我按下或正在按下的键来更改我创建的角色的图像?

我的目标是在按下“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

原文链接 https://stackoverflow.com/questions/9359858

点赞
stackoverflow用户312586
stackoverflow用户312586

你必须理解 LÖVE 的工作方式。它(非常基本地)执行以下操作:

love.load()       -- 在一开始调用一次 love.load
while true do     -- 循环重复下面的操作,“永远”(直到游戏结束)
  love.update(dt) --   调用 love.update()
  love.draw()     --   调用 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 -- 玩家一开始向左看
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

以上代码有一些重复性,可以使用表格进行重构,但我故意让它保持简单。

您还将注意到,在 love.update 函数中我包含了 dt 参数。这很重要,因为您需要使用它来确保动画在所有计算机中都以相同的方式工作(love.update 被调用的速度取决于每台计算机,而 dt 允许您应对这种情况)。

但是,如果您想进行动画,您可能希望使用这个动画库 或者 我的动画库

2012-02-20 11:23:12