如何使用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
相关产品推荐
相关产品推荐

