composition¶
- class janim.anims.composition.AnimGroup(*anims: ~janim.anims.animation.Animation, duration: float | None = None, lag_ratio: float = 0, offset: float = 0, rate_func: RateFunc = <function linear>, _get_anim_objects: bool = True, **kwargs)¶
基类:
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 )
lag_ratio 与 offset 的交互式示例:
0
0
Anim1 1s
Anim2 1s
Anim3 2s
Anim4 1s
AnimGroupExample ¶
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: Animation, 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 的交互式示例:
0
0
Anim1 1s
Anim2 1s
Anim3 2s
Anim4 1s
SuccessionExample ¶
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: Animation, duration: float | None = None, **kwargs)¶
基类:
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()