В lua я хочу, чтобы метод таблицы менял свое значение глобально, но это происходит только локально

Что происходит: мне нужно, чтобы self.key переключался между true и false вместе с нажатием клавиши.

По-видимому, это происходит на локальном уровне (если я раскомментирую предложение «если», печать происходит при нажатии клавиши), когда мне нужно, чтобы он фактически изменил значения объекта ключей.

keys = {}
keys.escape = false
keys.space  = false

function keys:pressed()
    for key in pairs(self) do
        self.key = love.keyboard.isDown(key)
        --if self.key then print(key) end
    end
end

function love.update()
    keys:pressed()
end

Любые идеи о том, как это исправить?


person Vitu Tomaz    schedule 03.01.2016    source источник
comment
self.key не совпадает с self[key]! Вы хотите последнего. Также имейте в виду, что цикл for также встретит ключ pressed.   -  person siffiejoe    schedule 03.01.2016


Ответы (1)


Ваша проблема не в этом, а в том, что вы устанавливаете индекс 'key'. Не индекс отдельного ключа... Если это имеет смысл.

По сути, когда вы устанавливаете self.key, key представляет собой строку. Не переменная цикла. Чтобы установить это, вам нужно будет проиндексировать его квадратными скобками.

Вот что я имею в виду:

keys = {}
keys.escape = false
keys.space  = false

function keys.pressed(self)
    for key in pairs(self) do
        self[key] = love.keyboard.isDown(key)
        --if self.key then print(key) end
    end
end

function love.update()
    keys:pressed()
end

Таким образом, мы используем переменную key вместо строки 'key'.

person warspyking    schedule 03.01.2016
comment
OMG, это было действительно очевидно, лол. Спасибо БОЛЬШОЕ, сработало как шарм :D - person Vitu Tomaz; 03.01.2016
comment
@Vitu Нет проблем, рад, что смог помочь. - person warspyking; 04.01.2016
comment
Извините, я не знал, что должен принять ответ! Спасибо еще раз! - person Vitu Tomaz; 07.01.2016
comment
@Viti Нет проблем :) (снова) - person warspyking; 07.01.2016