微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

错误的错误参数 #1 绘制预期可绘制,得到表格,尝试为主角制作精灵动画

如何解决错误的错误参数 #1 绘制预期可绘制,得到表格,尝试为主角制作精灵动画

Lua 的新手和爱。我正在尝试为我的平台游戏制作角色动画。我知道我的按键绑定和所有工作,但我以前从未动画过,所以我什至不知道我是否朝着正确的方向前进。我曾尝试查找指南,以便将我的代码与其他人的代码进行比较,但似乎其中大多数已经过时。最初我的播放器只是一个白色矩形,但现在我试图给它一个精灵。

这是我的 main.lua

local STI = require("sti")
local anim8 = require('anim8')
require("MC")

function love.load()
   map1 = STI("map/map1.lua",{"Box2d"})
   Physics = love.physics.newWorld(0,0)
   Physics:setCallbacks(beginContact,endContact)
   map1:Box2d_init(Physics)
   map1.layers.solid.visible = false
   background = love.graphics.newImage("assets/Base pack/bg.png")
   mc:load()
end

function love.update(dt)
   Physics:update(dt)
   mc:update(dt)
end

function love.draw()
   love.graphics.push()
   love.graphics.scale(5,3)
   love.graphics.draw(background)
   love.graphics.pop()

   map1:draw(0,2,2)
   love.graphics.push()
   love.graphics.scale(2,2)

   mc:draw()

   love.graphics.pop()
end

function love.keypressed(key)
   mc:jump(key)

   if keypressed == "escape" then
   love.event.quit(0)
   end
end



function beginContact(a,b,collision)
   mc:beginContact(a,collision)
end

function endContact(a,collision)
   mc:endContact(a,collision)
end

我不认为我的主程序有什么问题,但我认为有必要重新创建这个问题(对不起,如果它太长了)。现在我的 mc.lua 是我遇到问题的地方,因为我试图通过给他们一个跳跃空闲和步行动画来为玩家自己设置动画,我想我稍后会给他们一个损坏和死亡的动画。

local anim8 = require('anim8')

mc = {}

spr_mc_walk = love.graphics.newImage("assets/mc sprites/1 Pink_Monster/Pink_Monster_Walk_6.png")
local w = anim8.newGrid(32,32,spr_mc_walk:getWidth(),spr_mc_walk:getHeight())
walk = anim8.newAnimation(w('1-6',1),0.1)

spr_mc_idle = love.graphics.newImage("assets/mc sprites/1 Pink_Monster/Pink_Monster_Idle_4.png")
local i = anim8.newGrid(32,spr_mc_idle:getWidth(),spr_mc_idle:getHeight())
idle = anim8.newAnimation(i('1-4',0.1)

spr_mc_jump = love.graphics.newImage("assets/mc sprites/1 Pink_Monster/Pink_Monster_Jump_8.png")
local j = anim8.newGrid(32,spr_mc_jump:getWidth(),spr_mc_jump:getHeight())
jump = anim8.newAnimation(j('1-8',0.1)

obj_mc = walk

function mc:load()
    self.x = 100
    self.y = 0
    self.width = 20
    self.height = 60
    self.xvel = 0
    self.yvel = 0
    self.maxspeed = 200
    self.acceleration = 4000 -- max speed
    self.friction = 3900 -- how long it takes them to reach max speed
    self.gravity = 1000
    self.jumpAmount = -500

    self.grounded = false
    self.physics = {}
    self.physics.body = love.physics.newBody(Physics,self.x,self.y,"dynamic")
    self.physics.body:setFixedRotation(true)
    self.physics.shape = love.physics.newRectangleShape(self.width,self.height)
    self.physics.fixture = love.physics.newFixture(self.physics.body,self.physics.shape)
end

function mc:draw()
    love.graphics.draw(obj_mc,self.y)
end

这是我的大部分 mc 或播放器功能,除了移动等,但这包含我混淆的所有代码。我很确定我写的代码是对的,我只是对如何实际实现它感到困惑,因为我已经把它写下来了。我以为只是执行 draw 函数实际上会绘制角色的空闲版本,但随后出现错误。如果您需要更多代码或更多详细信息,请告诉我。 发生这种情况的错误

Error

MC.lua:41: bad argument #1 to 'draw' (Drawable expected,got table)


Traceback

[C]: in function 'draw'
MC.lua:41: in function 'draw'
main.lua:30: in function 'draw'
[C]: in function 'xpcall'

解决方法

我已经有一段时间没有这样做了,但我相信 obj_mc 在这种情况下是一个框架表。您需要在更新期间遍历它们。

local anim8timer  = 0
local anim8index  = 1
local anim8rate  = 0.2  --  pick an animation rate that looks good for your game

function mc:update( dt )
    anim8timer  = anim8timer +dt  --  add delta time

    if anim8timer >= anim8rate then
        anim8timer  = anim8timer -anim8rate  --  reset timer

        anim8index  = anim8index +1  --  next frame
        if anim8index > #obj_mc then anim8index = 1 end  --  loop frames
    end
end

function mc:draw()
    love.graphics.draw( obj_mc[ anim8index ],self.x,self.y )
end

它们可能有一个内置函数来完成其中的一些功能,因此请在 Love2D 论坛中查找与此类似的任何内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。