从字符串中调用对象方法

时间:2019-05-22 15:36:56

标签: lua

我的lua脚本中有一个主循环,并且我包括2个这样的对象:

local Menu = require("menu")
local InputHandler = require("inputhandler")

以下是每个对象的脚本:

menu.lua

Menu = {
  Active = false,
  Initialise = function(self)
  end,
  ToggleMenu = function(self)
    self.Active = not self.Active
    print(self.Active)
  end
}
return Menu

和inputhandler.lua

InputHandler = {
  KeyBinds = {
    q = { scancode = 16, bind = "q", action = "Menu:ToggleMenu" }
  },
  RunKeyAction = function (self, key)
    for k, v in pairs(self.KeyBinds) do
      if (v.bind == key) then
        _G[v.action]()
      end
    end
  end
}
return InputHandler

基本上,我试图将键盘按键映射到脚本中的各种功能,因此当有人按下“ Q”键时,它将运行与该按键关联的方法。

所以,如果我做这样的事情:

InputHandler:RunKeyAction("q")

它将运行此方法:

Menu:ToggleMenu()

现在运行此脚本时,出现此错误:

lua: ./classes//inputhandler.lua:8: attempt to call field '?' (a nil value)
stack traceback:
    ./classes//inputhandler.lua:8: in function 'RunKeyAction'
    [string "<eval>"]:20: in main chunk

有人可以告诉我这样做的正确方法吗?

感谢您阅读

1 个答案:

答案 0 :(得分:2)

使用

q = { scancode = 16, bind = "q", action = Menu.ToggleMenu }

v:action()