Я изучаю разработку игр с LÖVE2D и Lua, и в последнее время я использую класс конечных автоматов. Я сам не кодировал класс, но я прошел код и думаю, что в значительной степени получил его, кроме этой одной проблемы.
Дело в том, что я пытаюсь запросить у класса его текущее состояние, просто чтобы я мог использовать его внутри , если , но, несмотря ни на что, я не могу понять это правильно.
Вот соответствующий код класса:
StateMachine = Class{}
function StateMachine:init(states)
self.empty = {
render = function() end,
update = function() end,
enter = function() end,
exit = function() end
}
self.states = states or {} -- [name] -> [function that returns states]
self.current = self.empty
end
function StateMachine:change(stateName, enterParams)
assert(self.states[stateName]) -- state must exist!
self.current:exit()
self.current = self.states[stateName]()
self.current:enter(enterParams)
end
В основном я пытаюсь сделать следующее:
function StateMachine:is(stateName)
if self.current == self.states[stateName] then
-- this never executes
return true
end
return false
end
Я пытался изменить self.states[stateName]
к другим вещам, чтобы проверить это, а также попытался распечатать материал для консоли, чтобы понять, почему сравнение никогда не бывает верным. Кажется, self.current
возвращает указатель на таблицу и, следовательно, никогда не соответствует тому, что находится на другой стороне оператора сравнения.
Спасибо за помощь!