Python 在manim中异步运行不同的动画

Python 在manim中异步运行不同的动画,python,animation,manim,Python,Animation,Manim,我正在尝试运行两个动画(参考以下代码): 基本上两个矩形都在移动,但我不希望它们同时开始移动。我希望train开始移动,2秒后(train此时仍将移动,因为run\u time=18),我希望train2在屏幕上弹出并开始移动。我不确定这是怎么做到的,希望能得到任何帮助。玩了一段时间后,我已经想出了如何使用(v0.3.0)来做到这一点。这还没有很好的文档记录,但基本上您可以使用。我不确定这是否是最好的方法(在我看来,这太冗长了,层次太低),但它确实有效: 代码 将numpy作为np导入 从曼尼

我正在尝试运行两个动画(参考以下代码):


基本上两个矩形都在移动,但我不希望它们同时开始移动。我希望
train
开始移动,2秒后(
train
此时仍将移动,因为
run\u time=18
),我希望
train2
在屏幕上弹出并开始移动。我不确定这是怎么做到的,希望能得到任何帮助。

玩了一段时间后,我已经想出了如何使用(v0.3.0)来做到这一点。这还没有很好的文档记录,但基本上您可以使用。我不确定这是否是最好的方法(在我看来,这太冗长了,层次太低),但它确实有效:

代码

将numpy作为np导入
从曼尼姆进口*
类DeplayedTrains(场景):
def构造(自):
#创建两个序列
列车=(
矩形(高度=1,宽度=4),
矩形(高度=2,宽度=2),
)
#指出起点和终点
起点,终点=(-5,0)、(5,5))
#计算两列列车的移动距离
距离=(
(结束点\ux[0]-开始点\ux[0]),
(结束点[1]-开始点[1]),
)
#将列车放置在起点并添加到场景中
对于火车,zip中的起点(火车,起点):
训练移动到(np.数组([起始点,0,0]))
自我添加(列车)
#确定两列列车的运行持续时间,从配置中获取FPS
持续时间,fps=((5,3),配置[“帧速率])
#创建更新程序
更新程序=(
#将每个帧的差值添加到X中的当前位置,
#给定定义的距离和持续时间
lambda mobj,dt:mobj.set_x(mobj.get_x()+(距离[0]/fps/durations[0]),
lambda mobj,dt:mobj.set_x(mobj.get_x()+(距离[1]/fps/durations[1]),
)
#向trains对象添加更新程序,移动开始
列车[0]。添加更新程序(更新程序[0])
#等2秒钟
赛尔夫,等等(2)
#启动第二列列车的运行并等待3秒钟
列车[1]。添加更新程序(更新程序[1])
赛尔夫,等等(3)
#删除更新程序
列[0]。清除更新程序()。#您也可以调用列[0]。删除更新程序(更新程序[0])
列车[1]。清除更新程序()
class RelTrain(Scene):
    def construct(self):
        train = Rectangle(height=1, width=4)
        train2 = Rectangle(height=2, width=2)
        train.move_to(np.array([-10,0,0]))
        train2.move_to(np.array([0,0,0]))
        self.add(train, train2)
        self.play(
            train.move_to, np.array([10,0,0]),
            train2.move_to, np.array([15,0,0]),
            run_time=18,
            rate_func=linear,
        )
        self.wait()