Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua-尝试索引本地';项目';(a函数值)_Lua - Fatal编程技术网

Lua-尝试索引本地';项目';(a函数值)

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,

我得到了这个错误,我不知道这是一个范围问题,一个逻辑问题,还是完全其他的问题。用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 =   {} } } }

我很确定这个问题来自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