You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot 4无all_tween_completed信号,如何实现补间来回移动?

解决方案

没错,你完全可以通过监听Tween的finished信号来复现原有的循环移动行为,这是Godot 4里替代旧版all_tween_completed信号的常规做法。

具体实现方式

  1. 在set_tween函数里创建完Tween后,把它的finished信号连接到set_tween自身,这样每次动画结束就会自动触发下一次移动,实现来回循环的效果。
  2. 记得用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:42:44