Godot 3.3 GDScript如何无需枚举全部成员获取随机枚举值
GDScript 随机获取枚举成员的正确实现
错误原因
GDScript 中的枚举底层是键为枚举成员名称字符串、值为对应整数的字典,你之前的写法错误原因如下:
State.get(randi() % State.size()):get方法需要传入字典的键(也就是枚举成员的字符串名称),你传入随机整数找不到对应键,因此返回NullState[randi() % State.size()]:直接用整数索引字典,由于字典不存在整数键,因此抛出索引不存在错误
正确实现
如果需要获取随机的枚举整数值,使用以下代码即可,后续新增枚举成员无需修改这段逻辑:
var random_state = State.values()[randi() % State.size()]
如果需要获取随机的枚举成员名称字符串,使用:
var random_state_name = State.keys()[randi() % State.size()]
补充说明
State.values()会返回枚举所有整数值组成的数组,State.keys()会返回所有枚举成员名组成的字符串数组,二者长度都和State.size()一致,且顺序和枚举定义顺序完全匹配- Godot 4 中也可以用
randi_range(0, State.size() - 1)代替取模运算,写法更直观,效果完全一致:
# Godot 4 可选写法 var random_state = State.values()[randi_range(0, State.size() - 1)]
内容的提问来源于stack exchange,提问作者Newbyte
相关产品推荐
相关产品推荐

