updater¶
备注
详细教程:Updater 的使用
- class janim.anims.updater.UpdaterParams(global_t: float, alpha: float, range: TimeRange, extra_data: Any | None, _updater: _DataUpdater | GroupUpdater | None)¶
基类:
objectUpdater调用时会传递的参数,用于标注时间信息以及动画进度- global_t: float¶
- alpha: float¶
- extra_data: Any | None¶
- property elapsed: float¶
- class janim.anims.updater.StepUpdaterParams(global_t: float, dt: float, range: TimeRange, n: int, _updater: _StepUpdater)¶
基类:
objectStepUpdater调用时会传递的参数,用于标注时间信息以及动画进度- global_t: float¶
- dt: float¶
- n: int¶
- class janim.anims.updater.DataUpdater(item: T, func: DataUpdaterFn[T], *, extra: Callable[[Item], Any | None] = <function DataUpdater.<lambda>>, lag_ratio: float = 0, show_at_begin: bool = True, hide_at_end: bool = False, become_at_end: bool = True, skip_null_items: bool = True, root_only: bool = True, **kwargs)¶
基类:
Animation,Generic以时间为参数对物件的数据进行修改
例如:
class Example(Timeline): def construct(self) -> None: rect = Rect() rect.points.to_border(LEFT) self.play( DataUpdater( rect, lambda data, p: data.points.rotate(p.alpha * 180 * DEGREES).shift(p.alpha * 6 * RIGHT) ) )
会产生一个“矩形从左侧旋转着移动到右侧”的动画
并且,可以对同一个物件作用多个 updater,各个 updater 会依次调用
提示
默认
root_only=True即只对根物件应用该 updater;需要设置root_only=False才会对所有后代物件也应用该 updater另见 API 演示 中的
UpdaterExample- label_color: tuple[float, float, float] = (242, 218, 255)¶
- add_post_updater(func: DataUpdaterFn[T]) Self¶
- class janim.anims.updater.GroupUpdater(item: T, func: GroupUpdaterFn[T], *, show_at_begin: bool = True, hide_at_end: bool = False, become_at_end: bool = True, **kwargs)¶
基类:
Animation,Generic以时间为参数对一组物件的数据进行修改
警告
该 Updater 假设
func不会改变item后代物件结构,如果改变结构(例如增删子物件、become()结构不一致等情况),则可能导致意外行为- label_color: tuple[float, float, float] = (242, 218, 255)¶
- add_post_updater(func: GroupUpdaterFn[T]) Self¶
- apply_for_group(global_t: float) None¶
- class janim.anims.updater.MethodUpdater(item: Item, obj: Item | _AsTypeWrapper, show_at_begin: bool = True, hide_at_end: bool = False, become_at_end: bool = True, **kwargs)¶
基类:
Animation依据物件的变换而创建的 updater
具体参考
update()- label_color: tuple[float, float, float] = (214, 185, 253)¶
- updater(data: Item, p: UpdaterParams) None¶
- class janim.anims.updater.MethodUpdaterArgsBuilder(item: Item)¶
基类:
object使得
.update和.update(...)后可以进行同样的操作
- class janim.anims.updater.ItemUpdater(item: Item | None, func: ItemUpdaterFn, *, hide_at_begin: bool = True, show_at_end: bool = True, become_at_end: bool = True, **kwargs)¶
基类:
Animation以时间为参数显示物件
也就是说,在
ItemUpdater执行时,对于每帧,都会执行func,并显示func返回的物件在默认情况下:
传入的
item会在动画的末尾被替换为动画最后一帧func所返回的物件,传入become_at_end=False以禁用传入的
item会在动画开始时隐藏,在动画结束后显示,传入hide_at_begin=False和show_at_end=False以禁用若传入
item=None,则以上两点都无效
另见 API 演示 中的
UpdaterExample- label_color: tuple[float, float, float] = (242, 218, 255)¶
- call(p: UpdaterParams) Item¶
- render_group_fn()¶
- class janim.anims.updater.StepUpdater(item: T, func: StepUpdaterFn[T], step: float = 0.02, *, persistent_cache_step: float = 1, show_at_begin: bool = True, hide_at_end: bool = False, become_at_end: bool = True, rate_func: RateFunc = <function linear>, skip_null_items: bool = True, root_only: bool = True, progress_bar: bool = True, **kwargs)¶
基类:
Animation,Generic按步更新物件,每次间隔
step秒调用func进行下一步更新- label_color: tuple[float, float, float] = (242, 218, 255)¶
- add_post_updater(updater: StepUpdaterFn[T]) Self¶
- class janim.anims.updater.ChunkedNearbyCache(chunk_size: int, first_data: T, get_copy_func: Callable[[T], T], *, progress_bar_desc: str | None)¶
基类:
Generic用于辅助
StepUpdater的步进缓存类- 参数:
chunk_size -- 每个 chunk 的元素数量
技术细节:
pcache会存储每个 chunk 开头的元素tcache的会存储当前活跃位置邻近的三个 chunk(当前以及前后各一个)每个 chunk 中存储除了 chunk 开头的元素外的剩下最多
chunk_size - 1个元素
- disable_temp_record()¶
通过
with语句在其内部临时停止记录临时缓存用于
StepUpdater的become_at_end处理
- get_nearest_cache(n: int) tuple[int, T]¶
得到
n往前(包括n)的最近的一个缓存
- scroll_tcache_to(n: int) None¶
滚动裁剪
tcache_chunks,使得tcache_at_chunk和n对应的 chunk 对上
- iterates(cache_n: int, n: int) Iterable[int]¶
即
range(cache_n + 1, n + 1)如果两者之差过大,则会套入
ProgressDisplay(即tqdm) 以显示进度条
- record(data: T, n: int) None¶
将缓存记入
pcache或tcache中