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

如何使用Manim同时执行两个动画?

嘿,这个需求在Manim里实现起来超简单,核心就是利用并行动画的特性——Manim天生支持多个动画同时执行,我给你梳理清楚思路,再附个完整的可运行代码示例:

实现思路与代码示例

核心逻辑:同步执行多个动画

Manim中,只要把多个动画放在同一个self.play()调用里,它们就会默认同时启动。如果需要更精细的控制(比如统一时长、调整延迟),也可以用AnimationGroup工具,不过你的需求用基础写法就足够了。

完整可运行代码

from manim import *

class ParallelLetterAndDot(Scene):
    def construct(self):
        # 1. 创建需要的元素:两个字母和一个点
        left_char = Text("X").shift(LEFT * 2)
        right_char = Text("Y").shift(RIGHT * 2)
        # 初始把点放在左字母的底部偏下位置
        falling_dot = Dot().move_to(left_char.get_bottom() + DOWN * 0.3)
        
        # 2. 先把所有元素加到场景里
        self.add(left_char, right_char, falling_dot)
        
        # 3. 并行执行两个动画:点下落 + 字母向两侧分开
        self.play(
            # 点从初始位置下落到两个字母的中间正下方
            falling_dot.animate.move_to((0, left_char.get_y() - 2, 0)),
            # 左字母向左移动,右字母向右移动,留出空间
            left_char.animate.shift(LEFT * 1.8),
            right_char.animate.shift(RIGHT * 1.8),
            # 统一设置运行时长,确保两个动画完全同步
            run_time=2.5
        )
        
        # 停留几秒看最终效果
        self.wait(2)

关键细节说明

  • 用animate语法写动画逻辑非常直观,每个元素的动效独立定义,放在同一个self.play()里就会自动同步执行。
  • 如果想让两个动画的移动速度保持一致(而不是单纯时长一致),可以根据移动距离调整run_time。比如字母要移动3个单位,点要移动2个单位,就把run_time设为3,这样两者的速度都是1单位/秒,视觉上更协调。
  • 要是之后需要给某个动画加延迟(比如字母先动0.5秒再让点下落),可以给单个动画加rate_func=smooth或者用AnimationGroup(..., lag_ratio=0.2)来控制延迟比例。

内容的提问来源于stack exchange,提问作者shannontesla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:22:39