不二如是 发表于 2022-12-1 21:46:17

06 - 浅谈 Mobject 和必知方法

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

通过和小甲鱼老师的讨论,后续课程我就基于上一节课的 Jupyter 来演示。

本节课我们就从 Manim 中最基础的 Mobject 来谈起。

重点:


[*]add()
[*]wait()
[*]remove()


Mobject 是 Manim 中很多类的父类,例如:

VMobject、ImageMobject、PMobject、ValueTracker、Group/VGroup
这些类都是继承自 Mobject 哦,其中最有趣的就是 VMobject。

它的本质就是贝塞尔曲线(Bézier curve/贝兹曲线):



在 Manim 中看到的任何图像,像“直线、圆、正方形,椭圆形”等等,都是 VMobject 贝塞尔曲线构成。

甚至文本其实也是由 VMobject 构成的哦~

这些方法,随着我们课程的深入,遇到再来讲解。


必知方法

我们先来创建一个最简单的图形和文字案例:

from manim import *
config.medir_width = "100%"

通过上节课说的指令来运行下面的代码:

%%manim -qh MyScene

class MyScene(Scene):
    def construct(self):
      t = Triangle()
      s = Square()
      c = Circle()
      text = Text("我爱鱼C")

      self.add(text) #添加文本
      self.wait(0.5) #暂停0.5秒
      self.add(t) #添加三角形
      self.wait() #暂停1秒
      self.add(s,c)#添加矩形和圆形
      self.wait(2) #暂停2秒
      self.remove(s) #移除矩形
      self.wait(0.5)
结果:

https://www.bilibili.com/video/BV1aP4y197zd

代码中的 add(),wait(),remove() 都是很常用的方法。

add() 像屏幕中添加一个或者多个 Mobjec。

wait(t) 等待 t 时长,默认是“秒”单位。默认 1 秒。

remove() 从屏幕中删除一个或多个对象。

关于时间暂停,这里有个小建议。

对于真正的项目来说,我们会使用很多次 wait()。

但为了代码整齐和日后代码的可优化,往往只会几种不同状态的暂停。

例如:

**** Hidden Message *****
当然,这些值大家根据实际需求去定义修改,上面只是参考~

然后我们自己定义 4 个类,方便后续调用和修改:



这样后续我们直接调用即可,也方便批量修改。

最后的暂停是为了让“最后一个动画彻底结束”,如果你不想加短暂停,直接写 wait() 也可以~

好了,本节课就到这里,一定要动手写代码哦{:10_275:}

柿子饼同学 发表于 2022-12-2 19:24:39

Manim 好好玩

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

Manim 好好玩
页: [1]
查看完整版本: 06 - 浅谈 Mobject 和必知方法