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

Godot中Tween并行与链式动画问题:缩放动画无过渡

解决方案

问题出在你对set_parallel()的使用方式上——开启全局并行模式后,所有添加到该Tween的动画会同时启动,导致缩放动画的时序冲突。要实现「连续缩放动画与位移动画并行」的效果,需要将缩放动画做成链式序列,再与位移动画并行执行。

修复后的代码

var tween = get_tree().create_tween()

# 创建连续的缩放动画链:先放大,再缩小
var scale_sequence = tween.chain()
scale_sequence.tween_property($Sprite, "scale", Vector2(1.5, 1.5), 0.5)
scale_sequence.tween_property($Sprite, "scale", Vector2(1, 1), 0.5)

# 让位移动画与缩放序列并行执行
tween.tween_property($Sprite, "global_position", Vector2(1, 1), 1)

tween.play()

原理说明

  • tween.chain()会创建一个子Tween序列,里面的动画会按顺序连续执行(第一个缩放完成后才开始第二个)。
  • 主Tween默认是并行模式(无需手动调用set_parallel()),因此缩放序列和位移动画会同时启动,刚好满足你要的「并行+连续」效果。

另一种实现方式(独立Tween)

如果你更习惯分开管理动画,也可以创建两个独立的Tween分别控制移动和缩放,然后同时播放:

# 控制位移动画
var move_tween = get_tree().create_tween()
move_tween.tween_property($Sprite, "global_position", Vector2(1, 1), 1)

# 控制连续缩放动画
var scale_tween = get_tree().create_tween()
scale_tween.tween_property($Sprite, "scale", Vector2(1.5, 1.5), 0.5)
scale_tween.tween_property($Sprite, "scale", Vector2(1, 1), 0.5)

# 同时启动两个动画
move_tween.play()
scale_tween.play()

内容的提问来源于stack exchange,提问作者Bounty hunter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:25:18