Вызовите метод объекта из строки - PullRequest
1 голос
/ 22 мая 2019

У меня есть основной цикл в моем скрипте 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 Ответ

2 голосов
/ 22 мая 2019

Используйте

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

и

v:action()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...