前言:gdscript是Godot引擎提供的编程语言,代码结构上与Python类似
gdscript的match语句失效?
gdscript提供match实现其它编程语言的switch case效果,常见的结构如下
var value = 0
match 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 * SPEED
else:
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能否正常匹配呢?
结果:成功匹配