У меня есть основной цикл в моем скрипте 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
Может кто-нибудь сказать мне, как правильно это сделать?
Спасибо, что прочитали