2012-02-20 10 views
7

Entonces, me preguntaba cómo cambiar una imagen de personaje que he creado dependiendo de la tecla que he presionado/estoy presionando?Cómo crear una animación para caminar en LOVE 2D

Mi última opción es tener una animación caminando cuando se presiona "d" (o cualquiera de las teclas wasd) pero luego se queda quieto cuando se acaba de presionar la tecla "d", etc. Se han creado todas las imágenes ya.

He intentado esto pero no funcionó:

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 

Respuesta

20

hay que entender cómo funciona el amor. Es (muy básicamente) hace esto:

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 

Este esquema es tan frecuente que el bucle en sí tiene un nombre - se llama The Game Loop.

Tu código no funciona porque estás usando love.load() como si fuera parte del bucle del juego, pero no lo es. Se llama al principio, durante el primer milisegundo más o menos de su programa, y ​​nunca más.

que desea utilizar love.load no cargar las imágenes, y love.update para cambiarlos:

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 

El código anterior tiene cierta repetitividad que se puede factorizar utilizando tablas, pero he dejado que sea sencillo a propósito .

También notará que he incluido el parámetro dt en la función love.update. Esto es importante, ya que lo necesitará para asegurarse de que las animaciones funcionan igual en todas las computadoras (la velocidad a la que love.update se llama depende de cada equipo y dt le permite hacer frente a eso)

Sin embargo, si desea hacer animaciones, es probable que desee utilizar este Animation Lib o my own.

+0

¡Muchas gracias! – Switchkick