yield
和ts中的wait
类似
当你需要等待函数某条语句或之前的信息执行完成时,就需要这种表达法
简单控制
func my_func():
print("Hello")
yield()
print("world")
func _ready():
var y = my_func()
# Function state saved in 'y'.
print("my dear")
y.resume()
# 'y' resumed and is now an invalid state.
其中yield暂停了world的输出,但并不能阻止上层嵌套函数的继续执行,所以得到的输出结果:
Hello
my dear
world
在没有yield的情况下,输出是完全不一样的顺序
与信号Signal的协同操作
code | 说明 |
---|---|
yield(get_tree(), "idle_frame") |
下一帧恢复执行 |
yield(get_node("AnimationPlayer"), "finished") |
动画AnimationPlayer播放完毕后继续执行 |
yield(get_tree().create_timer(5.0), "timeout") |
暂停5秒后执行 |
yield(button_func(), "completed") |
函数执行完毕后执行 |
yield($Button0, "pressed") |
按钮点击后执行 |
父级函数等待子函数完成
func sub():
yield(get_tree().create_timer(5.0), "timeout")
print('sub complete')
func parent():
yield(sub(),'completed')
print('parent compelte')
结果为:
sub complete
parent compelte