如何在移动精灵时显示动画?

我正在使用 anim8 库,并参考了他在 类似问题 上的答案,但我仍不知道如何在按下移动的按键时触发我的动画:

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

功能爱加载()
  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)
结束

功能爱更新(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

结束

功能爱画()
   animation:draw(player.spritesheet, player.x, player.y)
结束

目前的情况是,精灵会向左、右、上、下移动,但当我按住[对应的]键盘键时,动画会冻结,当我释放键盘键时继续。

点赞
用户312586
用户312586

你每帧都在创建动画。不要这样做,应该只在某个地方创建一次(比如在 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
2013-03-23 15:13:21