Manim 的三块基石是场景(Scene) 、动画对象(Mobject) 和动画(Animation) 。
如果把做动画比作拍电影,那么 Scene 是摄影棚和导演,Mobject 是台上的演员,而 Animation 则是导演给演员说戏的过程。
1. 场景 (Scene):动画的容器与导演
Scene 是所有动画的基石。你的每一个动画创意,都需要通过定义一个继承自 Scene 的类来实现 。
- 核心作用 :它提供了一个画布 来放置你的图形,并像一个导演一样,控制着动画的播放顺序、等待时间以及图形的添加与移除 。
- 基本用法 :你需要在类的
construct方法中编写所有逻辑。这是 Manim 执行动画的起点 。
python
from manim import *
# 定义一个场景,继承自 Scene
class MyFirstScene(Scene):
def construct(self):
# 在这里编写你的动画逻辑
circle = Circle() # 创建一个演员(Mobject)
self.add(circle) # 导演说:上台(添加到画布)
self.wait(1) # 停顿1秒
2. 动画对象 (Mobject):舞台上的演员
Mobject 是 Mathematical Object 的缩写,代表了屏幕上所有可见的元素,例如圆形、正方形、公式、图片等 。
- 核心作用 :它们是构成你动画的基本视觉单元。你可以创建它们,然后修改它们的属性(如颜色、大小、位置)或为它们添加动画。
- 基本用法 :直接实例化各种 Mobject 的子类,并可以使用
shift、next_to、set_color等方法对其进行操作和定位 。
python
from manim import *
class MyFirstScene(Scene):
def construct(self):
# --- 创建演员 (Mobject) ---
square = Square() # 创建一个正方形
square.set_fill(BLUE, opacity=0.7) # 设置填充色和透明度
square.shift(LEFT) # 将它向左移动
circle = Circle(color=RED) # 创建一个红色描边的圆
circle.next_to(square, RIGHT, buff=1) # 将圆放在正方形的右侧,间隔为1
# 导演指挥演员上台
self.add(square, circle)
self.wait(1)
3. 动画 (Animation):演员的剧本
Animation 定义了 Mobject 如何随时间变化。它们负责让静态的图形"动起来" 。
- 核心作用 :描述从一个状态到另一个状态的平滑过渡 。常见的动画包括
Create(绘制图形)、Transform(形状变换)、FadeIn(淡入)、Rotate(旋转)等 。 - 基本用法 :在
Scene.play()方法中调用各种 Animation 类,并将 Mobject 作为参数传递进去。
python
from manim import *
class MyFirstScene(Scene):
def construct(self):
square = Square()
circle = Circle()
# --- 播放动画 (Animation) ---
# 剧本1:绘制正方形
self.play(Create(square))
self.wait(0.5)
# 剧本2:将正方形旋转90度(使用.animate语法,更直观)
self.play(square.animate.rotate(PI/2))
self.wait(0.5)
# 剧本3:将正方形变换为圆形
self.play(Transform(square, circle))
self.wait(1)
为了更清晰地理解这三个类的关系,做了一个简单的类比:
| 组成部分 | 核心类 | 电影拍摄类比 | 核心职责 |
|---|---|---|---|
| 场景 | Scene |
摄影棚 + 导演 | 提供画布,控制拍摄(play)、暂停(wait)、演员上下台(add/remove) |
| 动画对象 | Mobject |
演员 | 代表屏幕上可见的图形、公式、文字等视觉元素 |
| 动画 | Animation |
剧本 / 动作指导 | 定义演员如何表演(如出场、变形、移动、变色) |