Love2D 错误:'rectangle'的第二个参数错误(期望数字,得到nil)

我不知道我做错了什么……我在player.draw()函数中出现了错误。它所说的错误参数在love.graphics.rectangle()方法中。它说v.x是错误的参数。但它应该可以工作的。因为它访问了表或数组中元素的字段,对吗?有人能告诉我我做错了什么以及如何修复吗?非常感谢您!这是我的代码:

require "scripts.player"

width = love.graphics.getWidth()

block = {}
block.width = 60
block.height = 10
block.speed = 150
block.timer = 0
block.timerLim = math.random(1,2)
block.spawnX = math.random(0, width - player.width)

function block.spawn(x,y)
    table.insert(block, {x = x, y = y})
end

function block.move(dt)
    for i,v in ipairs(block) do
        v.y = v.y + block.speed * dt
    end
end

function block.draw()
    for i,v in ipairs(block) do
        love.graphics.setColor(255,0,255)
        love.graphics.rectangle("fill", v.x, v.y, block.width block.height)
    end
end

function block.spawnHandler(dt)
    block.timer = block.timer + dt
    if block.timer > block.timerLim then
        block.spawn(spawnX, -10)
        block.timer = 0
        block.timerLim = math.random(1,2)
        block.spawnX = math.random(0, width - block.width)
    end
end

-- 父级函数 --

function DRAW_BLOCK()
    block.draw()
end

function UPDATE_BLOCK(dt)
    block.move(dt)
    block.spawnHandler(dt)
end
点赞
用户4253427
用户4253427

block.spawnHandler 函数中,你本意是使用 block.spawnX 而不是 spawnX

由于 spawnX 不存在,它的值是 nil,这会传递到 spawn 函数并设置为坐标系的 x 值,然后传递到 rectangle 函数并成为了错误的参数。

关于此问题以及如何避免再次遇到,您可以在这里阅读更多详细信息: https://www.lua.org/pil/13.4.1.html

总之,Lua 是非常奇怪的语言,直到你通过使访问不存在的变量引发错误而不是返回 nil 等 800 多种方式来“解决”它,才能稍微摆脱这种奇怪的特性。一旦你“解决”了所有这些问题,你就会获得一种仅仅是奇怪的、不完全像 Lua 的东西。

2016-07-04 01:11:39