Gmod Lua - проверка наличия флага в битовом флаге
Я пытаюсь проверить, нажата ли клавиша в текущем кадре в Gmod Lua с cmd:GetButtons()
,
Другими словами, я пытаюсь увидеть, существует ли флаг в битовом флаге в Lua.
Я пытаюсь следующий код:
-- flags = 1024 (when holding forward)
-- IN_FORWARD = 1024
local flags = cmd:GetButtons()
if (flags & IN_FORWARD) == IN_FORWARD then
print("You're walking forward.")
end
И получаю следующую ошибку в моей консоли:
')' expected near '&'
Lua не поддерживает логический оператор &
?
Есть ли предупредительный способ проверить, существует ли флаг в битовом флаге с использованием Lua?
2 ответа
Lua 5.3 поддерживает битовые операторы.
Lua 5.2 и LuaJIT поддерживают битовые операции в виде библиотеки (каждая имеет свои собственные функции, они только частично совместимы).
Lua 5.1 и старше не имеют битовых операций. Если это то, что вы используете, вы можете эмулировать битовую операцию с помощью арифметики. Например (в вашем конкретном случае): (flags/IN_FORWARD)%2 >= 1
,
Хотя я не мог выяснить, на чем основана версия Garry's Mod для Lua, в нем есть битовые операции в виде библиотеки, и вы можете использовать bit.band
(flags, IN_FORWARD) == IN_FORWARD
(или же ~= 0
, или же != 0
с их расширениями синтаксиса) вместо.
Это может быть немного поздно, но ответ прост. Garry's Mod Lua поддерживает &&, а не &. Приветствия.