Gmod Lua - 检查在 bitflag 中是否存在标记

我正在尝试使用 cmd:GetButtons()在 Gmod Lua 中检查当前帧是否按下了某个键。

换句话说,我正在尝试查看 Lua 中的 bitflag 中是否存在标记。


我正在尝试以下代码:

-- flags = 1024 (按下向前键时)
-- IN_FORWARD = 1024
local flags = cmd:GetButtons()
if (flags & IN_FORWARD) == IN_FORWARD then
    print("你正在向前走。")
end

但是我在控制台中收到以下错误:

')' 附近需要 '&'

Lua 不支持逻辑运算符 & 吗?

是否有使用 Lua 检查 bitflag 中是否存在标记的其他方法?

点赞
用户805875
用户805875

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)代替。

2017-02-01 21:17:29
用户8895039
用户8895039

这可能有点晚了,但答案很简单。Garry's Mod Lua 支持 &&,不支持 &。干杯。

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

2017-11-06 15:29:00