8

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

我最终会在按下“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
4

1 回答 1

22

您必须了解 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

这种模式非常频繁,以至于循环本身有一个名字——它叫做The Game Loop

您的代码不起作用,因为您使用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允许您应对)

不过,如果你想做动画,你可能会想要使用这个Animation Lib我自己的.

于 2012-02-20T11:23:12.920 回答