如何将全局枚举值转换为 Godot 中的字符串?

blu*_*e10 5 enums godot

“GlobalScope”类定义了许多基本枚举,如Error枚举。

我正在尝试在发生错误时生成有意义的日志。但是打印一个 type 的值Error只会打印整数,这不是很有帮助。

关于枚举的 Godot 文档表明查找值应该像时尚一样在字典中工作。但是,尝试通过以下方式访问Error[error_value]错误:

The identifier "Error" isn't declared in the current scope.
Run Code Online (Sandbox Code Playgroud)

如何将此类枚举值转换为字符串?

Car*_*009 3

在您引用的文档中,它解释了枚举基本上只是创建一堆常量:

enum {TILE_BRICK, TILE_FLOOR, TILE_SPIKE, TILE_TELEPORT}
# Is the same as:
const TILE_BRICK = 0
const TILE_FLOOR = 1
const TILE_SPIKE = 2
const TILE_TELEPORT = 3
Run Code Online (Sandbox Code Playgroud)

然而,这些常量的标识符名称的存在只是为了让人们更容易阅读代码。它们在运行时被机器可以使用的东西替换,并且以后将无法访问。如果我想打印标识符的名称,我必须手动执行:

# Manually print TILE_FLOOR's name as a string, then its value.
print("The value of TILE_FLOOR is ", TILE_FLOOR)
Run Code Online (Sandbox Code Playgroud)

因此,如果您的目标是获得描述性错误输出,您应该以类似的方式执行此操作,也许像这样:

if unexpected_bug_found:
    # Manually print the error description, then actually return the value.
    print("ERR_BUG: There was a unexpected bug!")
    return ERR_BUG
Run Code Online (Sandbox Code Playgroud)

现在与字典的关系是字典可以像枚举一样起作用,而不是相反。枚举仅限于带有整数赋值的标识符列表,字典也可以这样做。但它们还可以做其他很酷的事情,比如拥有字符串标识符,我相信您可能已经想到了:

const MyDict = {
    NORMAL_KEY = 0,
    'STRING_KEY' : 1, # uses a colon instead of equals sign
}
func _ready():
    print("MyDict.NORMAL_KEY is ",    MyDict.NORMAL_KEY)    # valid
    print("MyDict.STRING_KEY is ",    MyDict.STRING_KEY)    # valid
    print("MyDict[NORMAL_KEY] is ",   MyDict[NORMAL_KEY])   # INVALID
    print("MyDict['STRING_KEY'] is ", MyDict['STRING_KEY']) # valid
    # Dictionary['KEY'] only works if the key is a string.
Run Code Online (Sandbox Code Playgroud)

这以它自己的方式很有用,但即使在这种情况下,我们也假设手头已经有与标识符名称显式匹配的字符串,这意味着我们也可以像第一个示例一样手动打印该字符串。