manim边做边学--动画组合

打印 上一主题 下一主题

主题 919|帖子 919|积分 2757

动画组合类的作用是将多个动画组合起来,以实现更复杂的动画效果。
Manim中有4个用于动画组合的类:

  • AnimationGroup:将多个动画组合在一起同时播放,能一次性呈现多个对象的不同变化
  • LaggedStart:按照添加顺序依次启动多个动画,每个动画间有延迟,使动画呈现出清晰的先后顺序
  • LaggedStartMap:对一组对象应用类似动画,并按顺序逐个启动且有延迟,快速实现批量相似动画效果
  • Succession:严格按照添加顺序依次播放多个动画,前一个完成后下一个才开始,确保动画按特定流程进行
1. 动画概述

1.1. AnimationGroup

当需要同时播放多个动画时,AnimationGroup非常有用。
例如,在一个场景中,需要同时移动多个图形、改变它们的颜色或实行其他操作。
AnimationGroup中包含的所有动画会同时开始和结束,可以通过设置lag_ratio参数来调整动画之间的延迟比例。
它的参数主要有:
参数名称类型阐明animations[Animation]要播放的动画对象序列groupGroup包含多个Mobject的组run_timefloat动画持续时间rate_funcfunc基于相对运行时间界说动画进度的函数lag_ratiofloat界说动画应用于子对象的延迟参数lag_ratio默以为0,体现所有动画同时播放。
若lag_ratio=0.5,体现下一个动画将在前一个动画播放到 50% 时开始。
1.2. LaggedStart

当需要按顺序播放多个动画,但盼望它们之间有肯定的延迟时,LaggedStart是一个很好的选择。
例如,依次显示一系列的文本内容或逐个移动多个对象。
LaggedStart用于创建具有节奏感的动画序列,使观众能够清晰地看到每个动画的发生过程。
动画会按照它们被添加的顺序依次启动,每个动画之间有肯定的延迟。
它的参数主要有:
参数名称类型阐明animations[Animation]要播放的动画对象序列lag_ratiofloat界说动画应用于子对象的延迟run_timefloat动画的持续时间1.3. LaggedStartMap

当需要对一组对象应用类似的动画,但盼望它们之间有肯定的延迟时,LaggedStartMap非常实用。
例如,逐个显示一组文本对象或逐个移动一组图形。
LaggedStartMap适用于处理大量相似对象的动画,通过简洁的方式实现逐个动画的延迟效果。
它的参数主要有:
参数名称类型阐明AnimationClassfunc要应用于mobject的动画类mobjectMobject动画要应用到的Mobjectarg_creatorfunc要应用于Mobject的函数run_timefloat动画的持续时间lag_ratiofloat界说动画应用于子对象的延迟1.4. Succession

当需要按顺序依次播放多个动画,且每个动画必须在前一个动画完成后才能开始时,Succession是首选。
例如,先移动一个对象,然后再对其进行旋转或缩放等操作。
Succession用于创建复杂的动画流程,确保动画按照特定的顺序实行,动画会按照它们被添加的顺序依次播放,前一个动画完成后,下一个动画才会开始。
它的参数主要有:
参数名称类型阐明animations[Animation]要播放的动画对象序列lag_ratiofloat界说动画应用于子对象的延迟run_timefloat动画的持续时间2. 利用示例

下面通过一些示例演示这4个动画组合类的利用。
2.1. 同时移动和变色多个图形

此示例中,展示了AnimationGroup并行处理多个动画的本领。
示例中同时启动圆形的移动动画和正方形的变色动画,让多个对象的不同动画效果同时呈现,且所有动画在同一时刻开始和结束。
  1. # 创建一个圆形和一个正方形
  2. c = Circle().shift(LEFT * 2)
  3. s = Square().shift(RIGHT * 2)
  4. # 定义圆形的移动动画和正方形的变色动画
  5. anim_circle = c.animate.shift(RIGHT * 4)
  6. anim_square = s.animate.set_color(RED)
  7. # 使用AnimationGroup同时播放这两个动画
  8. self.play(AnimationGroup(anim_circle, anim_square))
复制代码

2.2. 逐个显示文本内容

在这个示例中,LaggedStart的特点是按照添加动画的顺序依次启动,每个动画之间根据lag_ratio(这里设置为 0.3)产生延迟。
动画中可以清晰地看到每个文本依次淡入,营造出一种有序的节奏感,得当用于展示一系列相关元素的逐个出现效果。
  1. # 创建三个文本对象
  2. text1 = Text("死去元知万事空").shift(UP * 2)
  3. text2 = Text("但悲不见九州同").next_to(
  4.     text1, DOWN, buff=0.5
  5. )
  6. text3 = Text("王师北定中原日").next_to(
  7.     text2, DOWN, buff=0.5
  8. )
  9. text4 = Text("家祭无忘告乃翁").next_to(
  10.     text3, DOWN, buff=0.5
  11. )
  12. # 定义每个文本对象的淡入动画
  13. anim_text1 = FadeIn(text1)
  14. anim_text2 = FadeIn(text2)
  15. anim_text3 = FadeIn(text3)
  16. anim_text4 = FadeIn(text4)
  17. # 使用LaggedStart按顺序逐个启动动画,每个动画之间有一定延迟
  18. self.play(
  19.     LaggedStart(
  20.         anim_text1,
  21.         anim_text2,
  22.         anim_text3,
  23.         anim_text4,
  24.         lag_ratio=0.3,
  25.     ),
  26.     run_time=3,
  27. )
复制代码

2.3. 逐个移动一组点并变色

此例中,LaggedStartMap的上风在于可以方便地对一组对象应用类似的动画操作,并且通过lag_ratio(设置为 0.2)实现逐个对象动画的延迟效果。
这使得一组点能够逐个向下移动并变色,展示了批量处理相似对象动画且控制延迟的本领,适用于处理多个类似类型元素的动画序列。
  1. # 创建一组点
  2. dots = VGroup(*[Dot() for _ in range(5)]).arrange_in_grid(
  3.     rows=1, cols=5, buff=1
  4. )
  5. dots.shift(UP)
  6. # 定义一个动画函数,用于移动点并变色
  7. def move_and_color_dot(dot):
  8.     return dot.animate.shift(DOWN * 2).set_color(YELLOW)
  9. # 使用LaggedStartMap对每个点应用动画函数,逐个启动动画且有延迟
  10. self.play(LaggedStartMap(move_and_color_dot, dots, lag_ratio=0.2))
复制代码

2.4. 先旋转后移动图形

在该示例中,Succession严格按照顺序依次实行动画。
先旋转五角星图形,然后向上下左右四个方向分别射出不同颜色的点。
  1. # 创建一个三角形
  2. star = Star()
  3. dot1 = Dot(color=RED)
  4. dot2 = Dot(color=GREEN)
  5. dot3 = Dot(color=YELLOW)
  6. dot4 = Dot(color=PURPLE)
  7. self.add(star, dot1, dot2, dot3, dot4)
  8. # 定义三角形的移动、旋转和缩放动画
  9. rotate_star = Rotate(star, angle=PI * 2)
  10. send_dot1 = dot1.animate.shift(UP * 2)
  11. send_dot2 = dot2.animate.shift(RIGHT * 2)
  12. send_dot3 = dot3.animate.shift(DOWN * 2)
  13. send_dot4 = dot4.animate.shift(LEFT * 2)
  14. # 使用Succession按顺序依次播放动画,前一个动画完成后下一个才开始
  15. self.play(
  16.     Succession(
  17.         rotate_star,
  18.         send_dot1,
  19.         send_dot2,
  20.         send_dot3,
  21.         send_dot4,
  22.     ),
  23.     run_time=3,
  24. )
复制代码

3. 附件

文中的代码只是关键部门的截取,完整的代码共享在网盘中(anim_group.py),
下载地址: 完整代码 (访问暗码: 6872)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表