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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:05:56