不二如是 发表于 2022-12-3 22:22:33

07 - 浅谈 Animations

本帖最后由 不二如是 于 2022-12-6 20:17 编辑

上一节课(06)我们初步了解了 Mobject 的使用。

这节课来看 Animations 的必备玩法,也就是动画的玩法。

在 Manim 中 Animations 分为两大类:Scene.play 和 Updaters

我们从最简单的 Scene.play 说起,Updaters 稍微难一些,我们放到后续课程来说啦。

重点:

[*]run_time
[*]rate_func
[*]remover

在 play() 中可以有一个或者多个动画:

def construct(self):
    self.play(
      Animation1(...),
      Animation2(...),
      ...
    )
而同一个 play() 中的所有动画会在同一时间运行。

对于 Animation() 类中又有几个关键参数要知道:


[*]run_time
[*]rate_func
[*]remover


run_time

run_time 就是运行时长:

self.play(
      Animation1(mob1,run_time=3),
      Animation2(mob2,run_time=3.66),
      ...
    )
上述就会设置 Animation1 动画时长 3 秒,Animation2 动画时长 3.66 秒。

如果不想依次设置 run_time,还可以一步到位:

self.play(
      Animation1(...),
      Animation2(...),
      ...
      run_time = 7.66
    )
这样所有动画总共会在 7.66 秒内执行完。

当然如果你又在 Animation 中设置 run_time,又在最后也设置了,那么 Manim 默认会优先根据 Animation 中设置时长来生效。


rate_func

rate_func 即动画速率函数,常见就下面 8 种:




[*]smooth
[*]linear
[*]rush_into
[*]rush_from
[*]slow_into
[*]dounle_smooth
[*]there_and_back
[*]lingering
[*]exponential_decay

详细解释,我们放到后面来说,这里知道就好。

也是直接在 Animation 中使用:

self.play(
      Animation1(...,rate_func=func1),
      Animation2(...,rate_func=func2),
      ...
    )
func1 和 func2 就是上面说的 8 种速率中的一种。

Animation1 和 Animation2 就会依次使用 func1 和 func2 速率来生成动画。

也可以统一设置:

self.play(
      Animation1(...,rate_func=func1),
      Animation2(...),
      Animation3(...),
      ...
      rate_func = global_func,
    )
Animation1 使用 func1 速率,Animation2 和 Animation3 使用 global_func 速率。


remover

remover 参数是布尔类型,默认为 False,设置为 True 表示 Mobject 在动画运行结束后从屏幕中删除。

记住这些参数的玩法,总是自定义的优先级高于全局设置。

既然是浅谈,我们只需了解知道就好,详细的可以看官方文档:


传送门

文档中分为了 7 类,其实从应用角度来说只有下面 4 种动画创建:


[*]创建 Create 类动画:将内容添加到屏幕中
[*]提示 Indicate 类动画:用来区分不同元素,起到提示作用
[*]变形 Transform 类动画:使用两个 Mobject 修改元素形状和位置
[*]去除 Un 类动画:起到清除屏幕上元素效果的动画(remove 参数设置为 True)

好了,本节课就到这里,即将正式开始我们的 Manim 教程!

AhrimanSefid 发表于 2022-12-12 16:07:17

Manim 好好玩
页: [1]
查看完整版本: 07 - 浅谈 Animations