场景

限定名称: manim.scene.scene.Scene

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

基础:object

场景是动画的画布。

场景 的主要作用是向用户提供管理 mobjects 和动画的工具。一般来说,一个 manim 脚本由一个继承自 场景 的类组成,该类的 Scene.construct() 方法会被用户的代码覆盖。

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

一个场景通过调用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!")))

方法

add

Mobjects 将按照它们被添加的顺序从背景到前景显示。

add_foreground_mobject

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

add_foreground_mobjects

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

add_mobjects_from_animations

add_sound

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

add_subcaption

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

add_updater

向场景添加更新函数。

begin_animations

启动场景的动画。

bring_to_back

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

bring_to_front

将传递的mobjects再次添加到场景中,将它们推到场景的前面。

check_interactive_embed_is_valid

clear

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

compile_animation_data

给定一个动画列表,编译相应的静态和移动的mobjects,并收集动画的持续时间。

compile_animations

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

construct

向场景中添加内容。

embed

get_attrs

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

get_mobject_family_members

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

get_moving_and_static_mobjects

get_moving_mobjects

获取传递的动画中的所有移动对象。

get_restructured_mobject_list

给定一个mobjects列表和一个要移除的mobjects列表,这将从mobjects列表中过滤出可移除的mobjects。

get_run_time

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

get_time_progression

在制作自己的动画时,你几乎不会使用这个。

get_top_level_mobjects

返回所有不是子对象的mobjects。

interact

interactive_embed

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

is_current_animation_frozen_frame

返回当前动画是否生成静态帧(通常是一个等待)。

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

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

remove

从场景和前景中移除传递的mobjects列表中的mobjects,通过将它们从"mobjects"和"foreground_mobjects"中移除

remove_foreground_mobject

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

remove_foreground_mobjects

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

remove_updater

从场景中移除一个更新函数。

render

渲染此场景。

replace

用另一个对象替换场景中的一个对象,保留绘制顺序。

restructure_mobjects

tl:wr

set_key_function

setup

这是为了由任何通常被子类化的场景实现,并且在调用构造方法之前涉及一些常见的设置。

should_update_mobjects

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

tear_down

这是为了由任何通常被子类化的场景实现,并且在场景结束之前有一些要调用的公共方法。

update_meshes

update_mobjects

开始更新场景中的所有对象。

update_self

运行所有场景更新器函数。

update_to_time

wait

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

wait_until

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

属性

camera

_get_animation_time_progression(animations, duration)[source]

在制作自己的动画时,您几乎不会使用这个方法。 此方法仅供Manim内部使用。

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

Parameters:
  • animations (list[动画]) – 获取时间进度的动画列表。

  • duration (float) – 等待时间的持续时间

Returns:

命令行进度条。

Return type:

时间进度

add(*mobjects)[来源]

Mobjects 将按照它们被添加的顺序从背景到前景显示。

Parameters:

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

Returns:

添加Mobjects后的相同场景。

Return type:

场景

add_foreground_mobject(mobject)[来源]

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

Parameters:

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

Returns:

场景,添加了前景的mobject。

Return type:

场景

add_foreground_mobjects(*mobjects)[来源]

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

Parameters:

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

Returns:

场景,添加了前景的mobjects。

Return type:

场景

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

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

Parameters:
  • sound_file (str) – 声音文件的路径。

  • time_offset (float) – 声音文件中可以播放声音的偏移量。

  • 增益 (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()

下载上一个示例的资源 这里

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

在对应子标题文件的当前时间戳处添加一个条目。

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

Parameters:
  • 内容 (str) – 子标题内容。

  • duration (float) – 子标题显示的持续时间(以秒为单位)。

  • offset (float) – 这个偏移量(以秒为单位)被添加到子字幕的开始时间戳。

Return type:

示例

这个例子展示了为Manimations添加子标题的两种可能性:

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)[来源]

向场景添加更新函数。

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

警告

当使用Cairo渲染器时,修改mobjects的场景更新器不会被以与mobject更新器相同的方式检测到。更具体地说,仅通过场景更新器修改的mobject不一定会被添加到移动mobjects列表中,因此可能不会每帧都更新。

TL;DR: 使用mobject更新器来更新mobjects。

Parameters:

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

Return type:

begin_animations()[来源]

启动场景的动画。

Return type:

bring_to_back(*mobjects)[来源]

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

Parameters:

*mobjects (Mobject) – 将mobject(s)推到场景的后面。

Returns:

场景,将mobjects推到场景的后面。

Return type:

场景

bring_to_front(*mobjects)[来源]

将传递的mobjects再次添加到场景中,将它们推到场景的前面。

Parameters:

*mobjects (Mobject) – 将mobject(s)带到场景的前面。

Returns:

场景,将mobjects带到场景的前面。

Return type:

场景

clear()[source]

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

Returns:

场景,其中所有的mobjects在self.mobjects和self.foreground_mobjects中被移除。

Return type:

场景

compile_animation_data(*animations, **play_kwargs)[来源]

给定一个动画列表,编译相应的静态和移动对象,并收集动画持续时间。

这也开始了动画。

Parameters:
  • 动画 (动画 | 可迭代[动画] | types.GeneratorType[动画]) – 动画或具有mobject方法和参数的mobject

  • play_kwargs – 影响传递给animations的命名参数, 例如 run_time, lag_ratio 等等。

Returns:

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

Return type:

self, None

compile_animations(*args, **kwargs)[来源]

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

Parameters:
  • *args (动画 | Iterable[动画] | types.GeneratorType[动画]) – 要播放的动画。

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

Returns:

要播放的动画。

Return type:

元组[Animation]

construct()[来源]

向场景中添加内容。

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

注释

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

示例

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

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

获取给定属性标识符/名称的场景属性。

Parameters:

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

Returns:

传递的标识符的属性列表。

Return type:

列表

get_mobject_family_members()[source]

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

Returns:

mobject 家族成员列表。

Return type:

列表

get_moving_mobjects(*animations)[source]

获取传递的动画中的所有移动对象。

Parameters:

*animations (动画) – 用于检查移动物体的动画。

Returns:

可能在动画中移动的mobjects列表

Return type:

列表

get_restructured_mobject_list(mobjects, to_remove)[来源]

给定一个mobjects列表和一个要移除的mobjects列表,这将从mobjects列表中过滤出可移除的mobjects。

Parameters:
  • mobjects (列表) – 要检查的Mobjects。

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

Returns:

移除指定mobjects后的mobjects列表。

Return type:

列表

get_run_time(animations)[来源]

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

Parameters:

动画 (列表[动画]) – 一个动画列表,其总运行时间将被计算。

Returns:

列表中所有动画的总run_time

Return type:

浮点数

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

在制作自己的动画时,您几乎不会使用这个方法。 此方法仅供Manim内部使用。

返回一个CommandLine ProgressBar,其fill_time 取决于动画的run_time, 在该动画中要执行的迭代次数, 以及一个布尔值,表示是否考虑跳过的动画。

Parameters:
  • run_time (float) – 动画的run_time

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

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

Returns:

命令行进度条。

Return type:

时间进度

get_top_level_mobjects()[来源]

返回所有不是子对象的mobjects。

Returns:

顶级mobjects列表。

Return type:

列表

interactive_embed()[来源]

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

is_current_animation_frozen_frame()[来源]

返回当前动画是否生成静态帧(通常是一个等待)。

Return type:

布尔

next_section(name='unnamed', type=DefaultSectionType.NORMAL, skip_animations=False)[来源]

在这里创建分隔;最后一部分完成并创建一个新的部分。 skip_animations 跳过此部分中所有动画的渲染。 参考 文档 了解如何使用部分。

Parameters:
  • 名称 (字符串)

  • 类型 (字符串)

  • skip_animations (bool)

Return type:

pause(duration=1.0)[来源]

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

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

Parameters:

duration (float) – 暂停的持续时间。

另请参阅

wait(), 等待

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

在此场景中播放动画。

Parameters:
  • args (动画 | Iterable[动画] | types.GeneratorType[动画]) – 要播放的动画。

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

  • subcaption_duration – 指定子标题添加的持续时间。如果为None(默认值),则使用动画的运行时间。

  • subcaption_offset – 添加的子字幕的开始时间的偏移量(以秒为单位)。

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

play_internal(skip_rendering=False)[source]

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

Parameters:

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

remove(*mobjects)[来源]

从场景和前景中移除传递的mobjects列表中的mobjects,通过将它们从“mobjects”和“foreground_mobjects”中移除

Parameters:

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

remove_foreground_mobject(mobject)[来源]

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

Parameters:

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

Returns:

场景,移除了前景的mobject。

Return type:

场景

remove_foreground_mobjects(*to_remove)[来源]

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

Parameters:

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

Returns:

场景,移除了前景的mobjects。

Return type:

场景

remove_updater(func)[source]

从场景中移除一个更新函数。

Parameters:

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

Return type:

render(preview=False)[来源]

渲染此场景。

Parameters:

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

replace(old_mobject, new_mobject)[source]

用另一个对象替换场景中的一个对象,保留绘制顺序。

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

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

  • new_mobject (Mobject) – 一个不能已经在场景中的mobject。

Return type:

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

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

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

Parameters:
  • to_remove (Mobject) – 要移除的Mobject。

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

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

Returns:

具有重构Mobjects的Scene mobject。

Return type:

场景

setup()[来源]

这是为了由任何通常被子类化的场景实现,并且在调用构造方法之前涉及一些常见的设置。

should_update_mobjects()[source]

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

特别是,这检查是否

  • 场景always_update_mobjects 属性被设置为 True

  • 场景本身附带了基于时间的更新器,

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

这仅在播放单个等待动画时调用。

Return type:

布尔

tear_down()[来源]

这是为了由任何通常被子类化的场景实现,并且在场景结束之前有一些要调用的公共方法。

update_mobjects(dt)[source]

开始更新场景中的所有对象。

Parameters:

dt (float) – 更新之间的时间变化。默认(通常)为1/每秒帧数

update_self(dt)[source]

运行所有场景更新器函数。

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

Parameters:

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

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

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

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

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

  • frozen_frame (bool | None) – 如果为True,则不会评估更新函数,并且动画输出一个冻结的帧。如果为False,则调用更新函数并像往常一样渲染帧。如果为None(默认值),场景会尝试自行确定帧是否被冻结。

另请参阅

等待, should_mobjects_update()

wait_until(stop_condition, max_time=60)[source]

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

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

  • max_time (float) – 最大等待时间,单位为秒。