使用love.graphics.draw参数进行编码。出现异常:“bad argument #1 to 'draw'(期望Drawable,得到nil)”。

最近我一直在尝试学习如何编写游戏,使用的语言是lua 5.1,引擎是love2d。我对两者都不熟悉,仍在努力学习如何使用它们,所以这段代码都是基于Goature在Youtube上的教程的示例代码。这是程序的菜单部分,我收到了“states/menu/main.lua:22: bad argument #1 to 'draw'(Drawable expected, got nil)"的错误提示。我知道问题要么出在表格里,要么是在drawButton函数的参数里,但我不知道问题出在哪里或者如何解决它。 如果有人能解释一下问题在哪里,那就太好了。谢谢!

function load()

    love.graphics.setBackgroundColor(190, 190, 190, 255)

    imgPlay = love.graphics.newImage("Textures/start.png")
    imgPlayOn = love.graphics.newImage("Textures/start_on.png")
    imgexit = love.graphics.newImage("Textures/exit.png")
    imgexitOn = love.graphics.newImage("Textures/exit_on.png")
end

buttons = {{imgOff = imgPlay, imgOn = imgPlayOn, x = 400, y = 300 - 64, w = 256, h = 64, action = "play"},
              {imgOff = imgexit, imgOn = imgexitOn, x = 400, y = 300 + 64, w = 256, h = 64, action ="exit"}
              }
local function drawButton(highlightOff, highlightOn, x, y, w, h, mx, my)
    local ins = insideBox(mx, my, x - (w/2), y - (h/2), w, h)

    love.graphics.setColor(255, 255, 255, 255)

    if ins then
        love.graphics.draw(highlightOn, x, y, 0, 1, 1, (w/2), (h/2))
    else
        love.graphics.draw(highlightOff, x, y, 0, 1, 1, (w/2), (h/2))
    end
end

function love.update(dt)
end

function love.draw()
    local x = love.mouse.getX()
    local y = love.mouse.getY()

    for k, v in pairs (buttons) do -- v acts as an "address"
        drawButton(v.imgOff, v.imgOn, v.x, v.y, v.w, v.h, x, y) -- each elemant corresponds in the table
    end
end
点赞
用户5767783
用户5767783

问题在于如何定义 buttons 表格。

当您定义 buttons 表格时,为每个按钮对象设置了 imgOnimgOff 字段,但当您为它们分配变量时,您使用的是 nil。也就是说,当运行将 imgPlay 分配给 imgOn 的行时,imgPlaynil,因为尚未调用 love.load(在其中分配变量 imgPlay)。

我想说,解决这个问题的简单方法是将分配 buttons 放在 love.load 中。

function love.load()
    -- 其他代码(确保已经分配了 imgPlay 和其他变量!)
    buttons = {
        -- 您的按钮
    }
    -- 其他代码
end

-- buttons 不存在于这里... 但!

function love.draw()
    -- buttons 存在于此,因为 `love.draw` 仅在 `love.load` 之后调用
end
2016-01-23 06:02:29