2013-03-18 37 views
0

我使用anim8庫,並引用他的回答到similar problem,但我還是不搶怎麼讓我的動畫觸發,當我按一個鍵行走/移動:如何在移動精靈時顯示動畫?

-- main.lua 
local anim8 = require('lib.anim8.anim8') 
local player, animation, g 

function love.load() 
    player = {} 
    player.spritesheet = love.graphics.newImage('sprites/hero.png') 
    player.x = 200 
    player.y = 200 
    player.speed = 50 

    g = anim8.newGrid(16, 24, player.spritesheet:getWidth(), 
    player.spritesheet:getHeight()) 

    animation = anim8.newAnimation('loop', g('1-8,1-5'), 1.0) 
end 

function love.update(dt) 
    animation:update(dt) 

    if love.keyboard.isDown("w") then 
     animation = anim8.newAnimation('loop', g('4-6,1'), 0.1) 
    player.y = player.y - player.speed * dt 
    elseif love.keyboard.isDown("s") then 
    player.y = player.y + player.speed * dt 
    animation = anim8.newAnimation('loop', g('1-3,1'), 0.1) 
    elseif love.keyboard.isDown("a") and player.x > 0 then 
    player.x = player.x - player.speed * dt 
    animation = anim8.newAnimation('loop', g('7-8,1'), 0.1) 
    elseif love.keyboard.isDown("d") and player.x < 10000 then 
    player.x = player.x + player.speed * dt 
    animation = anim8.newAnimation('loop', g('4,2'), 0.1) 
    end 

end 


function love.draw() 
    animation:draw(player.spritesheet, player.x, player.y) 
end 

目前,有什麼發生的事情是精靈會向上,向下,向左,向右移動,但是當我按住[各自的]鍵盤鍵時動畫會凍結,並在釋放鍵盤鍵後繼續。

回答

4

您正在每幀上創建動畫。而不是這樣做,你應該創建它們一次(例如在love.load中),然後在love.update中重新使用它們。

local anim8 = require('lib.anim8.anim8') 
local player 

function love.load() 
    local spritesheet = love.graphics.newImage('sprites/hero.png'); 
    local g = anim8.newGrid(16, 24, spritesheet:getWidth(), spritesheet:getHeight()) 

    player = { 
    spritesheet = spritesheet, 
    x = 200, 
    y = 200, 
    speed = 50, 
    animations = { 
     up = anim8.newAnimation('loop', g('4-6,1'), 1.0), 
     down = anim8.newAnimation('loop', g('1-3,1'), 1.0), 
     left = anim8.newAnimation('loop', g('7-8,1'), 1.0), 
     right = anim8.newAnimation('loop', g('4,2'), 1.0) 
    } 
    } 
    player.animation = player.animations.down -- player starts looking down 
end 

function love.update(dt) 
    if love.keyboard.isDown("w") then 
    player.y = player.y - player.speed * dt 
    player.animation = player.animations.up 
    elseif love.keyboard.isDown("s") then 
    player.y = player.y + player.speed * dt 
    player.animation = player.animations.down 
    elseif love.keyboard.isDown("a") and player.x > 0 then 
    player.x = player.x - player.speed * dt 
    player.animation = player.animations.left 
    elseif love.keyboard.isDown("d") and player.x < 10000 then 
    player.x = player.x + player.speed * dt 
    player.animation = player.animations.right 
    end 
    player.animation:update(dt) 
end 

function love.draw() 
    player.animation:draw(player.spritesheet, player.x, player.y) 
end 

function love.keypressed(key) 
    if love.keyboard.isDown("escape") then 
    love.event.quit("quit") 
    end 
end