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
相关产品推荐
相关产品推荐

