枚举值
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 39 课,共 78 课。
每个枚举选项都是一个 int,因此你可以比较选项并用它们进行计算:
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
func _ready():
print(Day.FRIDAY) # 4
print(Day.SATURDAY > Day.FRIDAY) # true
print(Day.FRIDAY + 1) # 5枚举本身的作用类似于一个从名称映射到值的字典。keys() 按顺序返回名称,values() 返回值,而 size() 返回选项的数量:
print(Day.keys()) # ["MONDAY", "TUESDAY", ..., "SUNDAY"]
print(Day.size()) # 7要打印某个值的名称,可以用它作为索引访问 keys()。当选项的默认值为 0、1、2……时,这种方法有效。对于值经过指定的枚举,可以使用 find_key(),它会返回值的名称:
var today := Day.SATURDAY
print(Day.keys()[today]) # SATURDAY在顶层使用 enum Coin { COPPER = 1, SILVER = 10 } 时,Coin.keys()[10] 会越界,而 find_key() 可以正常工作:
print(Coin.find_key(10)) # SILVER反过来,要从以文本形式存储的名称获取它的值,请使用方括号。先用 has() 检查名称:不在枚举中的名称会导致错误。
var text := "FRIDAY"
if Day.has(text):
print(Day[text]) # 4for day_name in Day: 会像遍历字典一样遍历这些名称。
挑战
简单脚本声明了枚举 Day,包含从 MONDAY 到 SUNDAY 的值。程序读取两行:一个用大写字母表示的星期名称,以及一个天数(非负整数,即 0 或更大)。
打印两行:
- 星期名称、
has the value和该星期在枚举中的值 In、天数、days:和经过相应天数后的星期名称
SUNDAY 之后,星期会从 MONDAY 重新开始。输入 FRIDAY 和 3 时,输出为:
FRIDAY has the value 4
In 3 days: MONDAY亲手试试
extends Node
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
func _ready():
var day_name := OS.read_string_from_stdin()
var days := int(OS.read_string_from_stdin())
# 输出当天的值,以及经过指定天数后那一天的值
pass
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器