Manim CE v0.15.1中Succession类动画同一对象的异常问题咨询
Manim CE 0.15.1 同一对象连续动画实现方案
你遇到的问题是因为animate语法生成的动画会共享对象的状态引用,在Succession中同时传入多个dot1.animate.*调用时,后续的动画会覆盖前面的,最终只执行最后一个。以下是无需修改源码的解决方案:
方法1:拆分self.play调用
最直观的方式是将每个动画单独用self.play执行,self.play默认会等待前一个动画完成后再执行下一个:
from manim import * class SuccessionExample(Scene): def construct(self): dot1 = Dot(point=LEFT * 2 + UP * 2, radius=0.16, color=BLUE) self.add(dot1) self.play(dot1.animate.shift(UP)) self.play(dot1.animate.shift(DOWN)) self.play(dot1.animate.shift(LEFT))
方法2:直接使用动画类实例
绕过animate语法,直接创建Shift等动画类的实例传入Succession,每个动画会基于对象当前状态执行:
from manim import * class SuccessionExample(Scene): def construct(self): dot1 = Dot(point=LEFT * 2 + UP * 2, radius=0.16, color=BLUE) self.add(dot1) self.play(Succession( Shift(dot1, UP), Shift(dot1, DOWN), Shift(dot1, LEFT), ))
方法3:强制生成独立动画实例
如果想保留animate语法,可调用build()方法为每个动画生成独立实例,避免状态覆盖:
from manim import * class SuccessionExample(Scene): def construct(self): dot1 = Dot(point=LEFT * 2 + UP * 2, radius=0.16, color=BLUE) self.add(dot1) self.play(Succession( dot1.animate.shift(UP).build(), dot1.animate.shift(DOWN).build(), dot1.animate.shift(LEFT).build(), ))
内容的提问来源于stack exchange,提问作者Francisco Acosta Henao
相关产品推荐
相关产品推荐

