入门¶
简单示例¶
为了让你对 JAnim 的结构有个大概的认知,
你可以在你的文件夹内新建一个 learn.py 文件
然后将以下代码复制到文件内:
HelloJAnimExample ¶
from janim.imports import *
class HelloJAnimExample(Timeline):
def construct(self):
# define items
circle = Circle(color=BLUE)
square = Square(color=GREEN, fill_alpha=0.5)
# do animations
self.forward()
self.play(Create(circle))
self.play(Transform(circle, square))
self.play(Uncreate(square))
self.forward()
接着在命令行中,使用
janim run learn.py HelloJAnimExample
会弹出一个窗口,应当会显示和上面视频一致的内容
这个窗口默认是置顶的,你可以在菜单栏中取消
然后,我们具体看一下这段代码干了什么:
from janim.imports import *
这里,我们引入 JAnim 的主要功能,这样就可以在之后使用
class HelloJAnimExample(Timeline):
def construct(self):
这两行代码定义了一个继承自 Timeline 的类 HelloJAnimExample,
并且实现了 construct() 方法,动画内容就写在该方法中
HelloJAnimExample 可以写成你想取的名称,随意
小技巧
如果你对这两行感到困惑,可以先背下来,作为一种标准的“起手式”
当然,请将 HelloJAnimExample 替换为你希望的命名
我们继续往下看,便是具体动画的部分
circle = Circle(color=BLUE)
square = Square(color=GREEN, fill_alpha=0.5)
这两行,我们定义了一个圆和一个方形(默认情况下不填充内部)
此时,这两个物件还没有显示出来,我们接着看后面的几行
self.forward()
self.play(Create(circle))
self.play(Transform(circle, square))
self.play(Uncreate(square))
self.forward()
这里便是产生动画的代码,按照顺序来看:
self.forward()向前推进 1s;由于此时没有物件显示,所以这 1s 只有空白的背景self.play(Create(circle))播放圆的创建动画self.play(Transform(circle, square))播放从圆变换到方形的补间动画self.play(Uncreate(square))播放方形消失的动画self.forward()向前推进 1s,和前一个类似
其中:
比如,你可以把变换的那一行加上 duration=2
self.play(Transform(circle, square), duration=2)
那么动画过程就会持续 2s
物件¶
上面的例子中,涉及到两个物件:Circle 和 Square,它们本质上都是几何图形物件
组件¶
重要
对于物件,有一个重要的概念是“组件”
轮廓坐标
points描边粗细
radius描边颜色
stroke填充颜色
fill
为了对组件进行操作,你需要 物件.组件名.功能() ,比如:
circle.fill.set(RED, 0.5)
这一行会将圆的填充色设置为红色,并且有 50% 的透明度;你可以把这行插入到上面例子的 circle = Circle(color=BLUE) 的下一行,试试效果
同样的,circle.stroke.set(...) 会设置描边的颜色
提示
如果你想将描边和填充的颜色同时进行设置,不必写:
circle.stroke.set(RED)
circle.fill.set(RED)
作为一种更简便的写法,你可以将上面的两行写成这样:
circle.color.set(RED)
这里提供了一个 color,可以同时对描边和填充进行操作
初始化参数¶
还记得前面例子的代码吗?
# define items
circle = Circle(color=BLUE)
square = Square(color=GREEN, fill_alpha=0.5)
这里的代码看起来没有对 circle 的组件进行操作,那么是如何设置这些物件的颜色的呢?
你应该注意到了传入 Circle 和 Square 的参数,color=XXX 以及 fill_alpha=XXX
具体来说,在创建物件时对组件属性进行设置,并不需要一行一行地列出来,可以全部作为参数直接书写,这里列出几何图形物件可用的一些属性:
stroke_radius: 描边的粗细color: 描边和填充的颜色stroke_color: 描边颜色,会覆盖colorfill_color: 填充颜色,会覆盖coloralpha: 透明度,1表示完全不透明,0表示完全透明,0~1之间的数则为半透明stroke_alpha: 描边透明度,会覆盖alphafill_alpha: 填充透明度,会覆盖alpha
组件动画¶
通过前面的学习,我们知道,通过
circle.color.set(RED)
可以将圆设置为红色
这种设置是立刻的,但是如果这样写:
circle.anim.color.set(RED)
注意这里的区别是,先写 .anim 再跟上对组件的操作
这种写法,不再是“设置为红色”,而是会产生一个“从原来的颜色过渡到红色”的动画,可以放在 self.play(...) 里面显示动画
比如下面这个例子:
CmptAnimExample ¶
from janim.imports import *
class CmptAnimExample(Timeline):
def construct(self) -> None:
circle = Circle(color=BLUE, fill_alpha=0.5)
self.show(circle)
self.forward()
self.play(circle.anim.color.set(GREEN))
self.play(circle.anim.fill.set(alpha=0.2))
self.play(circle.anim.points.scale(2))
self.forward()
备注
self.show(circle) 是将圆直接显示出来,没有动画过程
希望你没忘记,执行的命令是:
janim run 文件名 动画名
如果上面这段代码也写在了 learn.py 中,那么就是:
janim run learn.py CmptAnimExample
导出视频¶
警告
若要导出视频,请确保安装了 FFmpeg 并正确地将其添加到了环境变量 PATH 中
上面进行预览是使用:
janim run learn.py CmptAnimExample
如果你想要将这个动画导出为视频,将 run 替换为 write 即可:
janim write learn.py CmptAnimExample
默认情况下,输出的视频会在目录中的 videos/ 文件夹下
如果再传入 -o,会在导出结束后自动打开视频文件:
janim write learn.py CmptAnimExample -o
实时预览¶
如果每次修改动画都需要关掉窗口、修改代码、重新执行,那么未免有点太麻烦了
因此,你可以在修改并保存代码后,点击窗口左上角“工具”中的“重新构建”(快捷键是 Ctrl+L),
这样就会更新动画内容,使其和更改后的代码一致
警告
以下的功能需要使用 VS Code 作为编辑器
每次修改完都要手动重新构建可能还是有点麻烦了,如果你使用 VS Code 开发,可以安装 VS Code 插件 janim-toolbox
运行时,在预览动画的命令中加上 -i,比如:
janim run learn.py CmptAnimExample -i
这样,在执行后,输出内容应当多出这样一句:交互端口已在 xxxxx 开启
小技巧
你可能注意到了,预览窗口默认是在右半边屏幕置顶的
这里推荐将 VS Code 放在左半边屏幕,关闭侧边栏进行书写
首先,在 VS Code 中,默认情况下,需要按下 Ctrl+J Ctrl+C (分别按下,这是组合键),如果成功的话,
会在 VS Code 右下角的状态栏中显示 已连接到界面端 xxxxx
接着,对代码进行更改,保存后,就会立即更新预览的内容