我收到了这个错误,我无法弄清楚它是否是一个范围问题,一个逻辑问题,或者其他什么。用C语言来说,目标是修改模块中的指针以改变draw()命令的行为。错误来自的地方是:
function M.draw()
for k, item in pairs(M.buttons.current) do
love.graphics.setColor(M.buttons.bkg_color)
love.graphics.rectangle("fill", item.pos_x, item.pos_y, M.buttons.size_x, M.buttons.size_y)
love.graphics.setColor(M.buttons.txt_color)
--TODO: center text on button
love.graphics.print(item.text, item.pos_x+10, item.pos_y+10)
end
end
此功能在第一个菜单中有效,但当我单击按钮更改菜单时,错误会在love.graphics.rectangle(...)行中弹出。更改M.buttons.current的代码是:
function M.mousereleased(x, y, button)
if button == 'l' and M.buttons.buttonPressedFlag and M.mouseCollide(x,y,M.buttons.buttonPressed) then
M.buttons.buttonPressed.fun()
end
M.buttons.buttonPressedFlag = false
end
和我点击的按钮是在初始化期间使用:
定义的M.formButton( M.buttons.main,
"options",
GLOBAL_SETTINGS.resolution_x/2-M.buttons.size_x,
GLOBAL_SETTINGS.resolution_y/7*5-M.buttons.size_y,
M.buttons.size_x,
M.buttons.size_y,
"Options",
function() M.buttons.current = M.buttons.main.options end )
其中M.formButton定义在模块的顶部:
function M.formButton(menu, buttonName, pos_x, pos_y, size_x, size_y, text, fun)
menu[buttonName].pos_x = pos_x
menu[buttonName].pos_y = pos_y
menu[buttonName].size_x = size_x
menu[buttonName].size_y = size_y
menu[buttonName].text = text
menu[buttonName].fun = fun
end
应该在新菜单中的每个按钮都是类似地定义的。 作为参考,模块结构的原型是:
local M = {buttons = { main = { campaign = { newgame = {},
continue = {},
load = {},
back = {} },
freeplay = { newgame = {},
continue = {},
load = {},
custom = {},
back = {} },
multiplayer = { lan = { newgame = {},
load = {},
back = {}, },
hotseat = { newgame = {},
load = {},
back = {}, },
network = { newgame = {},
load = {},
back = {} } },
options = { audio = {},
display = {},
gameplay = {},
language = {} },
exitgame = {} } } }
我很确定问题是来自mouseReleased函数的第三行,结合我实例化按钮的方式,但我无法弄清楚问题是什么。这可能是一件令人沮丧的事情,我很遗憾,因为我对这门语言很新,但任何帮助都会受到赞赏。
答案 0 :(得分:0)
您可能会在某处覆盖M.buttons.options
或M.buttons.current
,将其更改为功能值。尝试在函数调用之间定期添加print(type(M.buttons.current), type(M.buttons.options))
- 您应该能够将其缩小到违规代码。