error bad argument #1 to draw (drawable expected, got table),试图为主角制作一个精灵动画

Posted

技术标签:

【中文标题】error bad argument #1 to draw (drawable expected, got table),试图为主角制作一个精灵动画【英文标题】:error bad argument #1 to draw (drawable expected, got table), trying to animate a sprite for the main character 【发布时间】:2021-08-12 08:07:12 【问题描述】:

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, 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, b, collision)
end

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

我不认为我的 main 有什么问题,但我认为有必要重新创建问题(对不起,如果它让这个问题太长了)。现在我的 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, 32, spr_mc_idle:getWidth(), spr_mc_idle:getHeight())
idle = anim8.newAnimation(i('1-4', 1), 0.1)

spr_mc_jump = love.graphics.newImage("assets/mc sprites/1 Pink_Monster/Pink_Monster_Jump_8.png")
local j = anim8.newGrid(32, 32, spr_mc_jump:getWidth(), spr_mc_jump:getHeight())
jump = anim8.newAnimation(j('1-8', 1), 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.x, self.y)
end

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

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'

【问题讨论】:

哪一行#错误是在哪一行引发的? 抱歉,我以为我已经补充说错误发生在 mc.lua 的第 41 行 错误是说walk(一个包含动画的变量)不能被绘制到屏幕上。尝试确保您调用的 API 调用返回一个“可绘制”对象——或者根本就是一个对象。 我对你的意思有点困惑,我不是告诉它返回我认为是对象本身的图像吗?还是我错过了什么? 【参考方案1】:

我有一段时间没有这样做了,但我相信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 论坛中寻找任何类似的东西。

【讨论】:

我正在使用的 anim8 函数已经内置了循环。 你会这么认为,但显然不是。 obj_mc 是一个表。 Error MC.lua:41: bad argument #1 to 'draw' (Drawable expected, got table)你不会画桌子。试着弄清楚里面是什么。 for i=1, #obj_mc do print( type( obj_mc[i] ) end

以上是关于error bad argument #1 to draw (drawable expected, got table),试图为主角制作一个精灵动画的主要内容,如果未能解决你的问题,请参考以下文章

cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function ‘rectangle‘ > Overload resolution

cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function ‘rectangle‘ > Overload resolution

lua:bad argument #2 to '?'(start index out of bound)

Traincascade Error: Bad argument (Can not get new positive sample. Themost possible reason is insuff

Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"解决方法

Android studio出现Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request&q