什么是枚举?
本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 37 课,共 78 课。
有些值只能是几个选项之一:交通灯可以是红色、黄色或绿色,玩家可以处于空闲、奔跑或跳跃状态。你可以用数字来存储这些选项,例如用 0 表示空闲,用 1 表示奔跑,但这样每个读者都得记住每个数字的含义:
var state := 1
if state == 1:
print("Running")enum(enumeration 的简称)会为每个选项命名。GDScript 会为这些名称自动编号,从 0 开始:
enum State { IDLE, RUN, JUMP }现在,你可以写 State.RUN,而不是 1:枚举的名称、一个点和选项。这样代码的含义就一目了然:
var state := State.RUN
if state == State.RUN:
print("Running")枚举声明在脚本的顶层,与 func _ready(): 并列,而不在函数内部。函数中的 enum 行会导致错误,程序在运行前就会停止:
extends Node
enum State { IDLE, RUN, JUMP }
func _ready():
var state := State.JUMP
print(state) # 2这些选项是常量,所以 State.RUN = 5 是错误的。拼错的选项(例如 State.RUNN)会在程序运行前被报告,而用错误的数字(例如用 3 代替 2)则不会被发现。
挑战
简单程序会读取一个从 0 到 3 的整数,用来表示天气。用枚举为这些数字命名,并打印一条建议。
- 在脚本的顶层,声明一个名为
Weather的枚举,选项依次为SUNNY、CLOUDY、RAINY和SNOWY。 - 将
weather与枚举选项进行比较(不要与数字比较),并打印一行内容:
Weather.SUNNY:Wear sunglassesWeather.CLOUDY:Bring a jacketWeather.RAINY:Take an umbrellaWeather.SNOWY:Build a snowman
输入 2 时,输出为:
Take an umbrella亲手试试
extends Node
# 在这里声明 Weather 枚举
func _ready():
var weather := int(OS.read_string_from_stdin())
# 将 weather 与枚举选项比较,并输出建议
pass
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器