所以我想知道如何根据我按过的/我按过的键来更改我创建的角色的图像吗?
当按下“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
最佳答案
您必须了解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或my own。