Lua-尝试索引本地';项目';(a函数值)
我得到了这个错误,我不知道这是一个范围问题,一个逻辑问题,还是完全其他的问题。用C语言表示,目标是修改模块内的指针以更改draw()命令的行为。错误的来源是:Lua-尝试索引本地';项目';(a函数值),lua,Lua,我得到了这个错误,我不知道这是一个范围问题,一个逻辑问题,还是完全其他的问题。用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,
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 = {} } } }
我很确定这个问题来自MouseRelease函数的第三行,再加上我实例化按钮的方式,但我不知道问题出在哪里。这可能是一件让人痛苦的简单事情,因为我对这门语言还不太熟悉,所以我错过了它,但是任何帮助都将不胜感激 您可能正在某个地方覆盖
M.buttons.options
或M.buttons.current
,将其更改为函数值。尝试在函数调用之间定期添加print(键入(M.buttons.current),键入(M.buttons.options))
——您应该能够将其缩小到有问题的代码 正如错误消息所述,您正在访问变量项中的一个字段,但它包含一个函数。打印出M.buttons.current
的内容,并确保它是您认为的内容。单击按钮之前,M.buttons.current包含表0x41…10,单击按钮之后,它包含表0x41…98,因此表正在更改。如果我打印出每个表中的项目,那么第一个表包含一组表,第二个表包含一个函数(可能是更改M.buttons.current的函数),但我不知道函数是如何进入的。好的,我知道了。谢谢你的帮助。它应该是type
而不是typeof
?