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 поддерживает &&, а не &. Приветствия.

http://wiki.garrysmod.com/page/Specific_Operators

Другие вопросы по тегам