Manim 中的 Updaters 是附加到 mobject 的函数,它们会在每一帧自动运行,从而实现连续动画和对象之间的动态关系。与在指定持续时间内将对象从一种状态转换为另一种状态的标准动画不同,Updaters 提供基于时间或其他对象状态的响应式、持续性更改。
有关创建自定义动画的信息,请参阅 自定义动画。
Updaters 允许 mobject 动态响应场景中的变化,而无需为每次更改设置显式动画。它们在场景的更新周期中自动运行,并可以引用其他对象或与时间相关的变量。
来源: manimlib/animation/animation.py59-81 example_scenes.py328-338
添加 updater 的主要方法是通过所有 mobject 上的 add_updater 方法。
最简单的 updater 只有一个参数 - mobject 本身。
对于需要考虑帧之间时间差的动画。
来源: example_scenes.py328-338 manimlib/mobject/mobject_update_utils.py20-33
Manim 提供了一些辅助函数,可以更轻松地创建常见的 updater 模式。
来源: manimlib/mobject/mobject_update_utils.py1-124
always_redraw 函数会在每一帧重新创建 mobject。
这会创建一个支架,它会自动定位在正方形上方,并在正方形改变时自动更新。
always 方法提供了添加基于方法的 updaters 的简写方式。
对于参数可能发生变化的函数,请使用 f_always。
来源: example_scenes.py291-307 manimlib/mobject/mobject_update_utils.py26-58
以下示例演示了创建 updaters 的三种不同方法。
您可以使用 turn_animation_into_updater 将任何动画转换为连续运行的 updater。
来源: manimlib/mobject/mobject_update_utils.py83-123
当不再需要时,可以移除 Updaters。
Updaters 可以基于场景时间创建动画。
这会创建一个脉冲方块效果,其宽度会根据正弦函数而变化。
此示例演示了如何使用 updaters 创建跟踪图上移动点的元素。
clear_updaters() 暂时禁用 updaters 来调试问题。Updaters 提供了一种优雅的方式来创建动态、响应式的动画,而这对于分步动画来说是很难实现的。通过 updaters 连接对象,您可以创建复杂的交互式系统,其中元素会根据场景其他部分的变化自动做出响应。