Godot 4无all_tween_completed信号,如何实现补间来回移动?
解决方案
没错,你完全可以通过监听Tween的finished信号来复现原有的循环移动行为,这是Godot 4里替代旧版all_tween_completed信号的常规做法。
具体实现方式
- 在
set_tween函数里创建完Tween后,把它的finished信号连接到set_tween自身,这样每次动画结束就会自动触发下一次移动,实现来回循环的效果。 - 记得用
CONNECT_ONESHOT参数连接信号,避免重复绑定导致同一动画结束后多次触发set_tween。
适配后的完整代码
func set_tween(): if move_range == 0: return move_range *= -1 var move_tween = get_tree().create_tween() # 绑定finished信号,ONESHOT确保单次触发 move_tween.finished.connect(set_tween, CONNECT_ONESHOT) move_tween.tween_property(self, "position:x", position.x + move_range, move_speed) \ .from(position.x) \ .set_trans(Tween.TRANS_QUAD) \ .set_ease(Tween.EASE_IN_OUT)
补充细节
- 如果需要停止循环,可以加一个控制变量,比如
var is_looping = true,在set_tween开头判断:
之后只要把func set_tween(): if move_range == 0 or not is_looping: return # 剩余代码不变is_looping设为false,循环就会在当前动画结束后停止。 - Godot 4里
create_tween生成的Tween会自动被引擎管理生命周期,不需要手动销毁,除非你需要提前终止动画,这时调用move_tween.kill()即可。
内容的提问来源于stack exchange,提问作者AfonsoSalgadoSousa
相关产品推荐
相关产品推荐

