前言:gdscript是Godot引擎提供的编程语言,代码结构上与Python类似
gdscript的match语句失效?
gdscript提供match实现其它编程语言的switch case效果,常见的结构如下
var value = 0match value:-1:print("left") 0:print("none") 1:print("right")
value与0匹配,输出none
但是在如下代码中获取控制输入的direction时,尽管debugger时变量direction
的值在-1
、0
、1
中,但是却没走匹配的逻辑,控制台没有输出"left"
、"none"
、"right
"等信息
func _physics_process(delta):# Add the gravity.if not is_on_floor():velocity.y += gravity * delta# Handle jump.if Input.is_action_just_pressed("jump") and is_on_floor():velocity.y = JUMP_VELOCITY# Get the input direction and handle the movement/deceleration.# As good practice, you should replace UI actions with custom gameplay actions.var direction = Input.get_axis("move_left", "move_right")match direction:-1:print("left") 0:print("none") 1:print("right") if direction:velocity.x = direction * SPEEDelse:velocity.x = move_toward(velocity.x, 0, SPEED)move_and_slide()
默认情况下direction为0,声明一个为0的变量value与direction进行比较,在控制台输出为true
查看debugger窗口,direction
和value
确实为0,但是match
语句已经走到了29行,条件0没有匹配
难道是类型有什么问题吗?关注direction
的来源Input.get_axis
,方法声明中get_axis
返回的是float
类型
那把-1、0、1调整成-1.0、0.0、1.0能否正常匹配呢?
结果:成功匹配