场景¶
限定名称: 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!")))
方法
Mobjects 将按照它们被添加的顺序从背景到前景显示。
将单个mobject添加到前景,并内部添加到列表foreground_mobjects和mobjects中。
将mobjects添加到前景,并内部添加到列表foreground_mobjects和mobjects中。
add_mobjects_from_animations此方法用于向动画添加声音。
在当前时间戳下,在相应的子标题文件中添加一个条目。
向场景添加更新函数。
启动场景的动画。
将mobject从场景中移除并将其添加到场景的后面。
将传递的mobjects再次添加到场景中,将它们推到场景的前面。
check_interactive_embed_is_valid从场景中移除所有存在于self.mobjects和self.foreground_mobjects中的mobjects。
给定一个动画列表,编译相应的静态和移动的mobjects,并收集动画的持续时间。
从任何_AnimationBuilders创建_MethodAnimations,并使用传递给play()的kwargs更新动画kwargs。
向场景中添加内容。
embed根据属性的标识符/名称获取场景的属性。
返回场景中所有mobjects的家族成员列表。
get_moving_and_static_mobjects获取传递的动画中的所有移动对象。
给定一个mobjects列表和一个要移除的mobjects列表,这将从mobjects列表中过滤出可移除的mobjects。
获取动画列表的总运行时间。
在制作自己的动画时,你几乎不会使用这个。
返回所有不是子对象的mobjects。
interact类似于embed(),但允许屏幕交互。
返回当前动画是否生成静态帧(通常是一个等待)。
mouse_drag_orbit_controlsmouse_scroll_orbit_controls在这里创建分隔;最后一部分完成并创建一个新的部分。
on_key_presson_key_releaseon_mouse_dragon_mouse_motionon_mouse_presson_mouse_scroll暂停场景(即显示冻结帧)。
在此场景中播放动画。
此方法用于准备渲染的动画,应用所需的参数和参数,渲染它们,并将它们写入视频文件。
从场景和前景中移除传递的mobjects列表中的mobjects,通过将它们从"mobjects"和"foreground_mobjects"中移除
从前景中移除单个mobject,并从内部列表foreground_mobjects中移除。
从前景中移除mobjects,并从内部列表foreground_mobjects中移除。
从场景中移除一个更新函数。
渲染此场景。
用另一个对象替换场景中的一个对象,保留绘制顺序。
tl:wr
set_key_function这是为了由任何通常被子类化的场景实现,并且在调用构造方法之前涉及一些常见的设置。
如果此场景的mobjects应该更新,则返回True。
这是为了由任何通常被子类化的场景实现,并且在场景结束之前有一些要调用的公共方法。
update_meshes开始更新场景中的所有对象。
运行所有场景更新器函数。
update_to_time播放一个“无操作”动画。
等待直到满足条件,最多持续给定的最大时间。
属性
camera- _get_animation_time_progression(animations, duration)[source]¶
在制作自己的动画时,您几乎不会使用这个方法。 此方法仅供Manim内部使用。
使用
get_time_progression()来获取一个 命令行进度条,其fill_time取决于传递的动画的特性,- Parameters:
animations (list[动画]) – 获取时间进度的动画列表。
duration (float) – 等待时间的持续时间
- Returns:
命令行进度条。
- 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:
无
- clear()[source]¶
从场景中移除所有存在于self.mobjects和self.foreground_mobjects中的mobjects。
- Returns:
场景,其中所有的mobjects在self.mobjects和self.foreground_mobjects中被移除。
- Return type:
- compile_animations(*args, **kwargs)[来源]¶
从任何_AnimationBuilders创建_MethodAnimations,并使用传递给play()的kwargs更新动画kwargs。
- 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:
时间进度
- 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) – 暂停的持续时间。
- play(*args, subcaption=None, subcaption_duration=None, subcaption_offset=0, **kwargs)[source]¶
在此场景中播放动画。
- play_internal(skip_rendering=False)[source]¶
此方法用于准备渲染的动画,应用所需的参数和参数,渲染它们,并将它们写入视频文件。
- Parameters:
skip_rendering (bool) – 是否应跳过渲染,默认为 False
- remove(*mobjects)[来源]¶
从场景和前景中移除传递的mobjects列表中的mobjects,通过将它们从“mobjects”和“foreground_mobjects”中移除
- Parameters:
*mobjects (Mobject) – 要移除的mobjects。
- remove_updater(func)[source]¶
从场景中移除一个更新函数。
- Parameters:
func (Callable[[float], None]) – 要移除的更新函数。
- Return type:
无
- replace(old_mobject, new_mobject)[source]¶
用另一个对象替换场景中的一个对象,保留绘制顺序。
如果
old_mobject是某个其他 Mobject 的子对象(例如一个Group),new_mobject 将在组内替换它, 而不会改变父对象。
- 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 到组曾经所在的位置。
- should_update_mobjects()[source]¶
如果此场景的mobjects应该更新,则返回True。
特别是,这检查是否
这仅在播放单个等待动画时调用。
- Return type:
布尔
- 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()