菜单

更新器与连续动画

相关源文件

Manim 中的 Updaters 是附加到 mobject 的函数,它们会在每一帧自动运行,从而实现连续动画和对象之间的动态关系。与在指定持续时间内将对象从一种状态转换为另一种状态的标准动画不同,Updaters 提供基于时间或其他对象状态的响应式、持续性更改。

有关创建自定义动画的信息,请参阅 自定义动画

Updaters 的核心概念

Updaters 允许 mobject 动态响应场景中的变化,而无需为每次更改设置显式动画。它们在场景的更新周期中自动运行,并可以引用其他对象或与时间相关的变量。

来源: manimlib/animation/animation.py59-81 example_scenes.py328-338

添加基本 Updaters

添加 updater 的主要方法是通过所有 mobject 上的 add_updater 方法。

单参数 Updaters

最简单的 updater 只有一个参数 - mobject 本身。

双参数 Updaters

对于需要考虑帧之间时间差的动画。

来源: example_scenes.py328-338 manimlib/mobject/mobject_update_utils.py20-33

Updater 辅助函数

Manim 提供了一些辅助函数,可以更轻松地创建常见的 updater 模式。

来源: manimlib/mobject/mobject_update_utils.py1-124

always_redraw

always_redraw 函数会在每一帧重新创建 mobject。

这会创建一个支架,它会自动定位在正方形上方,并在正方形改变时自动更新。

always 和 f_always

always 方法提供了添加基于方法的 updaters 的简写方式。

对于参数可能发生变化的函数,请使用 f_always

来源: example_scenes.py291-307 manimlib/mobject/mobject_update_utils.py26-58

示例:动态更新元素

以下示例演示了创建 updaters 的三种不同方法。

来源: example_scenes.py282-338

将动画转换为 Updaters

您可以使用 turn_animation_into_updater 将任何动画转换为连续运行的 updater。

来源: manimlib/mobject/mobject_update_utils.py83-123

移除 Updaters

当不再需要时,可以移除 Updaters。

与时间相关的 Updaters

Updaters 可以基于场景时间创建动画。

这会创建一个脉冲方块效果,其宽度会根据正弦函数而变化。

来源: example_scenes.py333-338

高级示例:创建链接元素

此示例演示了如何使用 updaters 创建跟踪图上移动点的元素。

来源: example_scenes.py483-495

常见模式和用例

1. 跟踪移动对象

2. 值显示

3. 使对象始终可见

4. 动态属性

最佳实践

  1. 性能:Updaters 每一帧都会运行,因此请保持其高效。
  2. 范围:当不再需要 updaters 时将其移除。
  3. 依赖项:注意具有 updaters 的对象之间的依赖链。
  4. 调试:使用 clear_updaters() 暂时禁用 updaters 来调试问题。

Updaters 提供了一种优雅的方式来创建动态、响应式的动画,而这对于分步动画来说是很难实现的。通过 updaters 连接对象,您可以创建复杂的交互式系统,其中元素会根据场景其他部分的变化自动做出响应。