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

问题描述 投票:0回答:2

我正在尝试使用

cmd:GetButtons()
检查 Gmod Lua 中当前帧是否按下了某个键。

换句话说,我想看看Lua中的bitflag中是否存在一个flag。


我正在尝试以下代码

-- 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 检查位标志中是否存在标志?

lua enum-flags bitflags
2个回答
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
与他们的语法扩展)代替。


2
投票

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

https://wiki.facepunch.com/gmod/Specific_Operators

© www.soinside.com 2019 - 2024. All rights reserved.