2017-02-01 9 views
0

Я пытаюсь проверить, нажата ли клавиша в текущем кадре в Gmod Lua с cmd:GetButtons().Gmod Lua - Проверка наличия флага в битфлаге

Другими словами, я пытаюсь увидеть, существует ли флаг в битфлаге в Lua.


Я пытать following code:

-- 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 не поддерживает логическую оперу tor &?

Есть ли предупредительный способ проверить, существует ли флаг в битфлаге с использованием Lua?

+0

GMOD модифицировал Lua - смотри, например, [этот ответ] (http://stackoverflow.com/a/21768237/1847592). Вероятно, '&' также является расширением синтаксиса над стандартным Lua 5.1. Но когда вы пытаетесь запустить скрипт Gmod в стандартном Lua, вы получаете сообщение об ошибке. –

ответ

1

Lua 5.3 поддерживает операторы бит.

Lua 5.2 и LuaJIT поддержка битовых операций как библиотека (каждый из них имеет свои собственные, они лишь частично совместимы.)

Lua 5.1 и старше не имеют битовые операции. Если это то, что вы используете, вы можете эмулировать операцию бит по арифметике. Например. (в вашем конкретном случае): (flags/IN_FORWARD)%2 >= 1.

В то время как я не мог узнать, что Lua версии Mod Garry основан на, он имеет bit operations as a library, и вы можете использовать bit.band(flags, IN_FORWARD) == IN_FORWARD (или ~= 0 или != 0 с их расширениями синтаксиса) вместо этого.

1

Это может быть немного поздно, но ответ прост. Garry's Mod Lua поддерживает & &, а не &. Приветствия.

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

+0

Спасибо за добавленный ответ, я уверен, что этот простой ответ исправит его для меня в то время :) – Acidic