动画¶
动画随时间改变 mobject。基础展示了用于显示和隐藏 mobject 的动画。本页展示如何为任何变化制作动画、如何设定动画的时间,以及如何同时播放多个动画。
为任何变化制作动画¶
在方法前加上 .animate,self.play 就会将该方法所产生的变化制作成动画:
import manimgx as m
class Changes(m.Scene):
def construct(self) -> None:
square = m.Square()
self.play(m.Create(square))
self.play(square.animate.shift(3 * m.RIGHT))
self.play(square.animate.rotate(45 * m.DEGREES))
self.play(square.animate.set_fill(m.BLUE, opacity=1))
self.play(square.animate.scale(0.5).move_to(m.ORIGIN))
不加 .animate 时,square.shift(3 * m.RIGHT) 会立即移动正方形,没有动画。加上 .animate 时,正方形会在一秒内移动到那里。你可以在 .animate 之后链式连接多个变化,如最后一行所示,它们会同时发生。
将一个 mobject 变为另一个¶
m.ReplacementTransform 将一个 mobject 变为另一个:
import manimgx as m
class SquareIntoCircle(m.Scene):
def construct(self) -> None:
square = m.Square(color=m.BLUE, fill_opacity=0.5)
circle = m.Circle(color=m.PINK, fill_opacity=0.5)
self.play(m.Create(square))
self.play(m.ReplacementTransform(square, circle))
self.play(circle.animate.shift(2 * m.UP))
之后,circle 在视频中,而 square 不在。m.Transform(square, circle) 看起来一样,但它将 square 变为圆的形状并将其保留在视频中:之后,你移动的是 square,而不是 circle。
设定动画时间¶
大多数动画耗时一秒。要选择时长,请给出 run_time,单位为秒:
其 rate_func 设定它在每一刻的速度。默认的 m.smooth 开始时缓慢,然后加速,最后再缓慢结束。m.linear 保持匀速。在下方选择一个来查看它的运动方式:
速率函数参考文档列出了所有这些函数。
同时播放动画¶
给 self.play 多个动画,它们会同时播放。播放时长与最长的动画相同:
依次播放动画¶
m.LaggedStart 在前一个动画之后稍晚一点启动每个动画。其 lag_ratio 设定何时启动:0.5 表示在前一个动画完成一半时启动下一个。
import manimgx as m
class InTurn(m.Scene):
def construct(self) -> None:
circle = m.Circle()
square = m.Square()
triangle = m.Triangle()
shapes = m.VGroup(circle, square, triangle)
shapes.arrange(m.RIGHT, buff=1)
self.play(
m.LaggedStart(
m.Create(circle), m.Create(square), m.Create(triangle), lag_ratio=0.5
)
)
m.Succession 在一次播放中依次播放其动画。当各步骤是更大播放的一部分时使用它:例如,在书写标题的同时分三步移动一个形状。
参考文档展示了每种动画。
下一步¶
文本和数学将展示如何书写文字和公式,以及如何为它们制作动画。