composition¶
- class janim.anims.composition.AnimGroup(*anims: ~janim.typing.SupportsAnim, at: float = 0, duration: float | None = None, lag_ratio: float = 0, offset: float = 0, rate_func: RateFunc = <function linear>, name: str | None = None, collapse: bool = False)¶
基类:
Animation动画集合(并列执行)
若不传入
duration,则将终止时间(子动画结束时间的最大值)作为该动画集合的duration若传入
duration,则会将子动画的生效时间进行拉伸,使得总终止时间与duration一致且可以使用
at进行总体偏移(如at=1则是总体延后 1s)
可以使用
lag_ratio和offset控制每个子动画相对于前一个子动画的时间位置:lag_ratio表示 “前一个进行到百分之多少时,进行下一个”offset表示 “前一个进行多少秒后,进行下一个”
时间示例:
AnimGroup( Anim1(duration=3), # 0~3s Anim2(duration=4) # 0~4s ) AnimGroup( Anim1(duration=3), # 0~4.5s Anim2(duration=4), # 0~6s duration=6 ) AnimGroup( Anim1(duration=3), # 1~5.5s Anim2(duration=4), # 1~7s at=1, duration=6 )
另外,
collapse表示在预览界面中是否折叠该动画组(默认不折叠,而例如TransformMatchingShapes默认是折叠的)lag_ratio与offset的交互式示例:00Anim1 1sAnim2 1sAnim3 2sAnim4 1sAnimGroupExample ¶
from janim.imports import * class AnimGroupExample(Timeline): def construct(self): group = Group( Circle(fill_alpha=0.5), Square(fill_alpha=0.5), Text('Text', font_size=48), color=BLUE ) group.points.arrange(buff=LARGE_BUFF) self.forward() self.play( FadeIn(group[0]), AnimGroup( FadeIn(group[1]), FadeIn(group[2]), duration=2 ) ) self.forward() self.hide(group) self.play( FadeIn(group[0], duration=2), AnimGroup( FadeIn(group[1]), FadeIn(group[2]), at=1, duration=2 ) ) self.forward()
备注
为了更好地了解这些动画组合的效果,你可以复制到你的文件中运行,这样你就可以在界面上看到子动画对应的区段
- class janim.anims.composition.Succession(*anims: SupportsAnim, lag_ratio: float = 1, offset: float = 0, **kwargs)¶
基类:
AnimGroup动画集合(顺序执行)
会将传入的动画依次执行
相当于默认值
lag_ratio=1的AnimGroup
时间示例:
Succession( Anim1(duration=3), # 0~3s Anim2(duration=4) # 3~7s ) Succession( Anim1(duration=2), # 0~2s Anim2(at=1, duration=2), # 3~5s Anim3(at=0.5, duration=2) # 5.5~7.5s ) Succession( Anim1(duration=2), # 0~2s Anim2(duration=2), # 2.5~4.5s Anim3(duration=2), # 5~7s offset=0.5 )
lag_ratio与offset的交互式示例:00Anim1 1sAnim2 1sAnim3 2sAnim4 1sSuccessionExample ¶
from janim.imports import * class SuccessionExample(Timeline): def construct(self): group = Group( Circle(fill_alpha=0.5), Square(fill_alpha=0.5), Text('Text', font_size=48), color=BLUE ) group.points.arrange(buff=LARGE_BUFF) self.forward() self.play( Succession( *map(FadeIn, group) ) ) self.forward() self.hide(group) self.play( Succession( *map(FadeIn, group), offset=1 ) ) self.forward() self.hide(group) self.play( Succession( *map(FadeIn, group), offset=-0.7 ) ) self.forward()
- class janim.anims.composition.Aligned(*anims: ~janim.typing.SupportsAnim, at: float = 0, duration: float | None = None, rate_func: RateFunc = <function linear>, name: str | None = None, collapse: bool = False)¶
基类:
AnimGroup动画集合(并列对齐执行)
也就是忽略了子动画的
at和duration,使所有子动画都一起开始和结束时间示例:
Aligned( Anim1(duration=1), Anim2(duration=2) ) # Anim1 & Anim2: 0~2s Aligned( Anim1(at=1, duration=1), Anim2(duration=2), duration=4 ) # Anim1 & Anim2: 0~4s
警告
视频示例的代码在下方,不是上方的时间示例
AlignedExample ¶
from janim.imports import * class AlignedExample(Timeline): def construct(self): group = Group( Circle(fill_alpha=0.5), Square(fill_alpha=0.5), Text('Text', font_size=48), color=BLUE ) group.points.arrange(buff=LARGE_BUFF) self.forward() self.play( Aligned( FadeIn(group[0], duration=2), FadeIn(group[1], duration=3), FadeIn(group[2], at=0.5, duration=0.5) ) ) self.forward()