场景

合格名称: manim.scene.scene.Scene

Scene(renderer=None, camera_class=<class 'manim.camera.camera.Camera'>, always_update_mobjects=False, random_seed=None, skip_animations=False)[source]

基类: object

场景是您的动画的画布。

Scene 的主要作用是为用户提供管理 mobject 和动画的工具。一般来说,Manim 脚本由一个从 Scene 派生的类组成,其 Scene.construct() 方法由用户代码重写。

通过调用 Scene.add() 在屏幕上显示 Mobject,并通过调用 Scene.remove() 将其从屏幕上移除。所有当前在屏幕上的 Mobject 都保存在 Scene.mobjects 中。通过调用 Scene.play() 播放动画。

通过调用 Scene 内部的 Scene.render() 方法来渲染场景。这会依次调用 Scene.setup()Scene.construct()Scene.tear_down()

不建议在用户场景中重写 __init__ 方法。对于应在场景渲染之前运行的代码,请改用 Scene.setup()

示例

用您的代码重写 Scene.construct() 方法。

class MyScene(Scene):
    def construct(self):
        self.play(Write(Text("Hello World!")))

方法

添加

Mobject 将按照添加的顺序从背景到前景显示。

add_foreground_mobject

将单个 mobject 添加到前景,并内部添加到 foreground_mobjects 和 mobjects 列表中。

add_foreground_mobjects

将 mobject 添加到前景,并内部添加到 foreground_mobjects 和 mobjects 列表中。

add_mobjects_from_animations

add_sound

此方法用于为动画添加声音。

add_subcaption

在当前时间戳的相应副标题文件中添加一个条目。

add_updater

向场景添加更新函数。

begin_animations

开始场景的动画。

bring_to_back

将 mobject 从场景中移除并将其添加到场景的后方。

bring_to_front

将传入的 mobject 再次添加到场景中,将其推到场景的前方。

check_interactive_embed_is_valid

clear

从场景中移除 self.mobjects 和 self.foreground_mobjects 中存在的所有 mobject。

compile_animation_data

给定动画列表,编译相应的静态和移动 mobject,并收集动画时长。

compile_animations

从任何 _AnimationBuilders 创建 _MethodAnimations,并使用传递给 play() 的 kwargs 更新动画 kwargs。

construct

向场景添加内容。

embed

get_attrs

根据属性的标识符/名称获取场景的属性。

get_mobject_family_members

返回场景中所有 mobject 的家族成员列表。

get_moving_and_static_mobjects

get_moving_mobjects

获取传入动画中的所有移动 mobject。

get_restructured_mobject_list

给定 mobject 列表和要移除的 mobject 列表,此方法从 mobject 列表中过滤掉可移除的 mobject。

get_run_time

获取动画列表的总运行时间。

get_time_progression

在制作自己的动画时,您很少会用到这个。

get_top_level_mobjects

返回所有非子对象的 mobject。

interact

interactive_embed

类似于 embed(),但允许屏幕交互。

is_current_animation_frozen_frame

返回当前动画是否生成静态帧(通常是 Wait)。

mouse_drag_orbit_controls

mouse_scroll_orbit_controls

next_section

在此处创建分隔;上一节结束,新一节创建。

on_key_press

on_key_release

on_mouse_drag

on_mouse_motion

on_mouse_press

on_mouse_scroll

pause

暂停场景(即显示冻结帧)。

play

在此场景中播放动画。

play_internal

此方法用于准备动画以进行渲染,向其应用所需的参数,渲染它们,并将其写入视频文件。

移除

通过从“mobjects”和“foreground_mobjects”中移除 mobject,从而将传入列表中的 mobject 从场景和前景中移除。

remove_foreground_mobject

从前景中移除单个 mobject,并内部从 foreground_mobjects 列表中移除。

remove_foreground_mobjects

从前景中移除 mobject,并内部从 foreground_mobjects 列表中移除。

remove_updater

从场景中移除更新函数。

渲染

渲染此场景。

replace

在场景中用一个 mobject 替换另一个,同时保留绘制顺序。

restructure_mobjects

tl:wr

set_key_function

setup

这应由任何常用作子类并需要在使用 construct 方法之前进行一些通用设置的场景实现。

should_update_mobjects

如果应更新此场景的 mobject,则返回 True。

tear_down

这应由任何常用作子类并需要在场景结束前调用一些通用方法的场景实现。

update_meshes

update_mobjects

开始更新场景中的所有 mobject。

update_self

运行所有场景更新函数。

update_to_time

validate_run_time

wait

播放一个“无操作”动画。

wait_until

等待直到满足条件,最多持续给定最大时长。

属性

相机

时间

场景开始以来的时间。

参数:
  • renderer (CairoRenderer | OpenGLRenderer | None)

  • camera_class (type[Camera])

  • always_update_mobjects (bool)

  • random_seed (int | None)

  • skip_animations (bool)

_get_animation_time_progression(animations, duration)[source]

在制作自己的动画时,您很少会用到这个。此方法供 Manim 内部使用。

使用 get_time_progression() 获取一个命令行进度条(CommandLine ProgressBar),其 fill_time 取决于传入动画的特性,

参数:
  • animations (list[Animation]) – 获取时间进程的动画列表。

  • duration (float) – 等待时间的时长

返回:

命令行进度条。

返回类型:

time_progression

add(*mobjects)[source]

Mobject 将按照添加的顺序从背景到前景显示。

参数:

*mobjects (Mobject) – 要添加的 Mobject。

返回:

添加 Mobject 后的场景。

返回类型:

场景

add_foreground_mobject(mobject)[source]

将单个 mobject 添加到前景,并内部添加到 foreground_mobjects 和 mobjects 列表中。

参数:

mobject (Mobject) – 要添加到前景的 Mobject。

返回:

已添加前景 Mobject 的场景。

返回类型:

场景

add_foreground_mobjects(*mobjects)[source]

将 mobject 添加到前景,并内部添加到 foreground_mobjects 和 mobjects 列表中。

参数:

*mobjects (Mobject) – 要添加到前景的 Mobject。

返回:

已添加前景 Mobject 的场景。

返回类型:

场景

add_sound(sound_file, time_offset=0, gain=None, **kwargs)[source]

此方法用于为动画添加声音。

参数:
  • sound_file (str) – 音频文件的路径。

  • time_offset (float) – 音频文件中的偏移量,在此偏移量之后可以播放声音。

  • gain (float | None) – 声音的增益。

示例

示例: SoundExample

from manim import *

class SoundExample(Scene):
    # Source of sound under Creative Commons 0 License. https://freesound.org/people/Druminfected/sounds/250551/
    def construct(self):
        dot = Dot().set_color(GREEN)
        self.add_sound("click.wav")
        self.add(dot)
        self.wait()
        self.add_sound("click.wav")
        dot.set_color(BLUE)
        self.wait()
        self.add_sound("click.wav")
        dot.set_color(RED)
        self.wait()
class SoundExample(Scene):
    # Source of sound under Creative Commons 0 License. https://freesound.org/people/Druminfected/sounds/250551/
    def construct(self):
        dot = Dot().set_color(GREEN)
        self.add_sound("click.wav")
        self.add(dot)
        self.wait()
        self.add_sound("click.wav")
        dot.set_color(BLUE)
        self.wait()
        self.add_sound("click.wav")
        dot.set_color(RED)
        self.wait()

在此处下载上一个示例的资源 here

add_subcaption(content, duration=1, offset=0)[source]

在当前时间戳的相应副标题文件中添加一个条目。

当前时间戳从 Scene.time 获取。

参数:
  • content (str) – 副标题内容。

  • duration (float) – 副标题显示的时长(秒)。

  • offset (float) – 此偏移量(秒)将添加到副标题的起始时间戳。

返回类型:

示例

此示例说明了向 Manim 动画添加副标题的两种可能性

class SubcaptionExample(Scene):
    def construct(self):
        square = Square()
        circle = Circle()

        # first option: via the add_subcaption method
        self.add_subcaption("Hello square!", duration=1)
        self.play(Create(square))

        # second option: within the call to Scene.play
        self.play(
            Transform(square, circle), subcaption="The square transforms."
        )
add_updater(func)[source]

向场景添加更新函数。

场景更新函数每帧运行,它们是最后一种运行的更新器。

警告

当使用 Cairo 渲染器时,修改 mobject 的场景更新器不会像 mobject 更新器那样被检测到。具体来说,仅通过场景更新器修改的 mobject 不一定会添加到移动 mobject 列表中,因此可能不会每帧更新。

一言以蔽之:使用 mobject 更新器来更新 mobject。

参数:

func (Callable[[float], None]) – 更新函数。它接受一个浮点数,表示自上次更新以来的时间差(通常等于帧率)。

返回类型:

begin_animations()[source]

开始场景的动画。

返回类型:

bring_to_back(*mobjects)[source]

将 mobject 从场景中移除并将其添加到场景的后方。

参数:

*mobjects (Mobject) – 要推到场景后方的 mobject。

返回:

已将 mobject 推到场景后方的场景。

返回类型:

场景

bring_to_front(*mobjects)[source]

将传入的 mobject 再次添加到场景中,将其推到场景的前方。

参数:

*mobjects (Mobject) – 要带到场景前方的 mobject。

返回:

已将 mobject 带到场景前方的场景。

返回类型:

场景

clear()[source]

从场景中移除 self.mobjects 和 self.foreground_mobjects 中存在的所有 mobject。

返回:

已移除 self.mobjects 和 self.foreground_mobjects 中所有 mobject 的场景。

返回类型:

场景

compile_animation_data(*animations, **play_kwargs)[source]

给定动画列表,编译相应的静态和移动 mobject,并收集动画时长。

这也启动了动画。

参数:
  • animations (Animation | Mobject | _AnimationBuilder) – 带有 mobject 方法和参数的动画或 mobject

  • play_kwargs – 影响 animations 中传入内容的命名参数,例如 run_timelag_ratio 等。

返回:

如果没有可播放内容则为 None,否则为 self。

返回类型:

self, None

compile_animations(*args, **kwargs)[source]

从任何 _AnimationBuilders 创建 _MethodAnimations,并使用传递给 play() 的 kwargs 更新动画 kwargs。

参数:
  • *args (Animation | Mobject | _AnimationBuilder) – 要播放的动画。

  • **kwargs – 调用 play() 的配置。

返回:

要播放的动画。

返回类型:

Tuple[Animation]

construct()[source]

向场景添加内容。

Scene.construct() 内部,通过调用 Scene.add() 在屏幕上显示 Mobject,并通过调用 Scene.remove() 将其从屏幕上移除。所有当前在屏幕上的 Mobject 都保存在 Scene.mobjects 中。通过调用 Scene.play() 播放动画。

注意

初始化代码应放入 Scene.setup() 中。终止代码应放入 Scene.tear_down() 中。

示例

一个典型的 Manim 脚本包括一个从 Scene 派生并重写了 Scene.construct() 方法的类

class MyScene(Scene):
    def construct(self):
        self.play(Write(Text("Hello World!")))
get_attrs(*keys)[source]

根据属性的标识符/名称获取场景的属性。

参数:

*keys (str) – 要返回属性的参数名称。

返回:

传入标识符的属性列表。

返回类型:

list

get_mobject_family_members()[source]

返回场景中所有 mobject 的家族成员列表。如果添加了 Circle() 和 VGroup(Rectangle(),Triangle()),它不仅返回 Circle()、Rectangle() 和 Triangle(),还返回 VGroup() 对象。

返回:

mobject 家族成员列表。

返回类型:

list

get_moving_mobjects(*animations)[source]

获取传入动画中的所有移动 mobject。

参数:

*animations (Animation) – 要检查移动 mobject 的动画。

返回:

动画中可能移动的 mobject 列表

返回类型:

list

get_restructured_mobject_list(mobjects, to_remove)[source]

给定 mobject 列表和要移除的 mobject 列表,此方法从 mobject 列表中过滤掉可移除的 mobject。

参数:
  • mobjects (list) – 要检查的 Mobject。

  • to_remove (list) – 要移除的 mobject 列表。

返回:

已移除要移除的 mobject 的 mobject 列表。

返回类型:

list

get_run_time(animations)[source]

获取动画列表的总运行时间。

参数:

animations (list[Animation]) – 要计算总 run_time 的动画列表。

返回:

列表中所有动画的总 run_time

返回类型:

浮点数

get_time_progression(run_time, description, n_iterations=None, override_skip_animations=False)[source]

在制作自己的动画时,您很少会用到这个。此方法供 Manim 内部使用。

返回一个命令行进度条(CommandLine ProgressBar),其 fill_time 取决于动画的 run_time、该动画中要执行的迭代次数以及一个布尔值,指示是否考虑跳过的动画。

参数:
  • run_time (float) – 动画的 run_time

  • n_iterations (int | None) – 动画中的迭代次数。

  • override_skip_animations (bool) – 是否在进度条中显示跳过的动画。

返回:

命令行进度条。

返回类型:

time_progression

get_top_level_mobjects()[source]

返回所有非子对象的 mobject。

返回:

顶级 mobject 列表。

返回类型:

list

interactive_embed()[source]

类似于 embed(),但允许屏幕交互。

is_current_animation_frozen_frame()[source]

返回当前动画是否生成静态帧(通常是 Wait)。

返回类型:

布尔值

next_section(name='unnamed', section_type=DefaultSectionType.NORMAL, skip_animations=False)[source]

在此处创建分隔;上一节结束,新一节创建。skip_animations 跳过此节中所有动画的渲染。有关如何使用章节的更多信息,请参阅文档

参数:
  • name (str)

  • section_type (str)

  • skip_animations (bool)

返回类型:

pause(duration=1.0)[source]

暂停场景(即显示冻结帧)。

这是 wait() 的别名,其中 frozen_frame 设置为 True

参数:

duration (float) – 暂停的时长。

另请参阅

wait(), Wait

play(*args, subcaption=None, subcaption_duration=None, subcaption_offset=0, **kwargs)[source]

在此场景中播放动画。

参数:
  • args (Animation | Mobject | _AnimationBuilder) – 要播放的动画。

  • subcaption – 动画期间应添加的外部副标题的内容。

  • subcaption_duration – 指定副标题添加的时长。如果为 None(默认值),则取动画的运行时间。

  • subcaption_offset – 添加副标题的开始时间的偏移量(秒)。

  • kwargs – 所有其他关键字都传递给渲染器。

play_internal(skip_rendering=False)[source]

此方法用于准备动画以进行渲染,向其应用所需的参数,渲染它们,并将其写入视频文件。

参数:

skip_rendering (bool) – 是否跳过渲染,默认为 False

remove(*mobjects)[source]

通过从“mobjects”和“foreground_mobjects”中移除 mobject,从而将传入列表中的 mobject 从场景和前景中移除

参数:

*mobjects (Mobject) – 要移除的 mobject。

remove_foreground_mobject(mobject)[source]

从前景中移除单个 mobject,并内部从 foreground_mobjects 列表中移除。

参数:

mobject (Mobject) – 要从前景中移除的 mobject。

返回:

已移除前景 mobject 的场景。

返回类型:

场景

remove_foreground_mobjects(*to_remove)[source]

从前景中移除 mobject,并内部从 foreground_mobjects 列表中移除。

参数:

*to_remove (Mobject) – 要从前景中移除的 mobject。

返回:

已移除前景 mobject 的场景。

返回类型:

场景

remove_updater(func)[source]

从场景中移除更新函数。

参数:

func (Callable[[float], None]) – 要移除的更新函数。

返回类型:

render(preview=False)[source]

渲染此场景。

参数:

preview (bool) – 如果为 True,则在文件查看器中打开场景。

replace(old_mobject, new_mobject)[source]

在场景中用一个 mobject 替换另一个,同时保留绘制顺序。

如果 old_mobject 是某个其他 Mobject(例如 Group)的子对象,则 new_mobject 将在组内替换它,而不会更改父 mobject。

参数:
  • old_mobject (Mobject) – 要替换的 mobject。必须存在于场景中。

  • new_mobject (Mobject) – 必须尚未在场景中的 mobject。

返回类型:

restructure_mobjects(to_remove, mobject_list_name='mobjects', extract_families=True)[source]
tl:wr

如果您的场景有一个 Group(),并且您从 Group 中移除了一个 mobject,此方法将解散该组并将其余 mobject 直接放入 self.mobjects 或 self.foreground_mobjects 中。

在场景包含组(例如 Group(m1, m2, m3))但其子对象之一被移除(例如 scene.remove(m1))的情况下,mobject 列表将被编辑为包含其他子对象,但不包含 m1,例如,它现在将 m2 和 m3 插入到该组曾经存在的位置。

参数:
  • to_remove (Sequence[Mobject]) – 要移除的 Mobject。

  • mobject_list_name (str) – 要从中移除的 mobject 列表(“mobjects”、“foreground_mobjects”等)。

  • extract_families (bool) – 是否应递归提取 mobject 的家族。

返回:

已重组 Mobject 的场景 mobject。

返回类型:

场景

setup()[source]

这应由任何常用作子类并需要在使用 construct 方法之前进行一些通用设置的场景实现。

should_update_mobjects()[source]

如果应更新此场景的 mobject,则返回 True。

特别是,这会检查是否

  • Scenealways_update_mobjects 属性设置为 True

  • Scene 本身附有基于时间的更新器,

  • Scene 中的任何 mobject 都附有基于时间的更新器。

这只在播放单个 Wait 动画时调用。

返回类型:

布尔值

tear_down()[source]

这应由任何常用作子类并需要在场景结束前调用一些通用方法的场景实现。

属性 time: float

场景开始以来的时间。

update_mobjects(dt)[source]

开始更新场景中的所有 mobject。

参数:

dt (float) – 更新之间的时间变化。默认值(通常)为 1/frames_per_second

update_self(dt)[source]

运行所有场景更新函数。

在所有类型的更新函数(mobject 更新器、网格更新器、场景更新器)中,场景更新函数最后调用。

参数:

dt (float) – 自上次更新以来的场景时间。

wait(duration=1.0, stop_condition=None, frozen_frame=None)[source]

播放一个“无操作”动画。

参数:
  • duration (float) – 动画的运行时间。

  • stop_condition (Callable[[], bool] | None) – 一个不带位置参数的函数,每次渲染帧时都会对其进行评估。只有当函数的返回值是真值,或者当 duration 中指定的时间过去时,动画才会停止。

  • frozen_frame (bool | None) – 如果为 True,则不评估更新函数,动画输出冻结帧。如果为 False,则调用更新函数并照常渲染帧。如果为 None(默认),场景会尝试自行判断帧是否冻结。

另请参阅

Wait, should_mobjects_update()

wait_until(stop_condition, max_time=60)[source]

等待直到满足条件,最多持续给定最大时长。

参数:
  • stop_condition (Callable[[], bool]) – 一个不带参数的函数,用于确定场景是否应继续等待。

  • max_time (float) – 最大等待时间(秒)。