Manim中组序列动画仅执行一次:如何按预期执行多轮动画?
Group动画仅执行一次的原因及解决办法
问题描述
我尝试同时为不同对象运行动画序列,以下是出现问题的代码片段:
group = VGroup(*tasks) animations = [ group.animate.shift(RIGHT), group.animate.shift(RIGHT), group.animate.shift(RIGHT) ] self.play(*animations)
实际效果是所有元素仅向右移动一次就结束了,我遗漏了什么?
原因分析
你创建的三个动画本质上是完全相同的属性修改操作——都是让group向右移动一段RIGHT距离。当你用self.play(*animations)同时播放这三个动画时,Manim会将它们合并为一次属性更新,最终只会执行一次shift操作。
解决办法
需求1:让group连续移动三次(有分段感)
如果需要三次移动过程清晰可辨,不要一次性播放所有动画,而是按顺序执行:
# 分多次调用play self.play(group.animate.shift(RIGHT)) self.play(group.animate.shift(RIGHT)) self.play(group.animate.shift(RIGHT)) # 或者用Succession组合动画 from manim import Succession self.play(Succession( group.animate.shift(RIGHT), group.animate.shift(RIGHT), group.animate.shift(RIGHT) ))
需求2:让group一次性移动三倍距离
如果不需要分段,直接指定总位移即可:
self.play(group.animate.shift(3*RIGHT))
需求3:让不同对象同时移动(原需求)
如果你原本是想让tasks里的每个对象各自执行动画,而非同一个group重复移动,需要给每个对象单独创建动画:
animations = [ task.animate.shift(RIGHT) for task in tasks ] self.play(*animations)
内容的提问来源于stack exchange,提问作者Borislav Stoilov
相关产品推荐
相关产品推荐

