本篇介绍Manim中的淡入和淡出动画效果。
淡入FadeIn
主要用于让对象以渐变的方式在场景中显现。
它的特点是视觉上柔和过渡,能自然地引导观众注意新出现的元素。
淡出FadeOut
则是使对象逐渐透明直至消失。
用于移除已完成展示作用的元素或者进行场景切换过渡,它渐变消失的特点避免了元素突兀地离开场景。
这两个类为创建流畅的动画展示提供了有效的工具。
1. 动画函数概要
1.1. FadeIn
FadeIn
通过逐渐增加对象的透明度从完全透明(不可见)到完全不透明(正常显示),
给人一种平滑过渡的感觉,不会像突然出现的元素那样突兀。
FadeIn
主要参数有:
shift
参数可以使对象在淡入的同时按照给定的方向和距离进行移动,增加动画的动态效果。
target_position
参数如果是一个Mobject
,则以该对象的中心位置作为起始位置。
scale
参数使得对象会先按照此比例进行缩放,然后在淡入过程中恢复到原始大小。
FadeIn
的方法有:
1.2. FadeOut
当某个元素在演示过程中不再需要展示,需要以一种自然的方式从场景中移除时,FadeOut
就非常有用。
与FadeIn
相反,它使对象的透明度从完全不透明逐渐变为完全透明,从而实现逐渐消失的视觉效果。
FadeOut
的主要参数有:
shift
参数可以使对象在淡出的同时按照给定的方向和距离进行移动,增加动画的动态效果。
target_position
参数如果是一个Mobject
,则会将其中心位置作为目标位置。
scale
参数使对象在逐渐消失的同时进行缩小或放大,为动画添加更多变化。
FadeOut
的方法和FadeIn
的类似,不再赘述。
2. 使用示例
FadeIn
和FadeOut
的参数不仅名称一样,含义也类似,只是一个用于淡入,一个用于淡出。
下面通过示例中演示淡入FadeIn
的参数,对于FadeOut
也是一样使用,反之亦然。
2.1. 基本使用
这个示例展示了FadeIn
和FadeOut
的基本使用,没有使用特殊参数,仅演示了对象的淡入和淡出效果。
# 创建一个圆形
c = Circle()
# 创建一个正方形
s = Square(color=BLUE)
# 将圆形添加到场景中
self.add(c)
self.wait()
# 淡入正方形 淡出圆形
self.play(FadeIn(s), FadeOut(c))
先将圆形添加到场景中,然后同时淡入正方形并淡出圆形。
2.2. FadeIn的shift参数
此示例演示FadeIn
的shift
参数,通过设置shift
参数,使4个不同的形状在淡入时从场景的不同方向移动到其最终位置,展示了对象在淡入过程中的平移效果。
c = Circle(
radius=0.8,
fill_opacity=1,
fill_color=RED_B,
)
t = Triangle(
color=GREEN,
fill_opacity=1,
fill_color=GREEN_B,
)
s = Square(
side_length=2,
color=BLUE,
fill_opacity=1,
fill_color=BLUE_B,
)
r = Rectangle(
height=2,
width=1,
color=YELLOW,
fill_opacity=1,
fill_color=YELLOW_B,
)
VGroup(c, t, s, r).arrange_in_grid(2, 2)
self.play(FadeIn(c, shift=UP * 2))
self.play(FadeIn(t, shift=DOWN * 2))
self.play(FadeIn(s, shift=LEFT * 2))
self.play(FadeIn(r, shift=RIGHT * 2))
2.3. FadeIn的target_position 参数
这个示例演示了FadeIn
的target_position
参数,将文本的淡入起始位置设置为点的位置,体现了对象可以从指定位置开始淡入的特点。
# 创建一个点
d1 = Dot(color=BLUE).shift(UP * 2 + LEFT * 2)
d2 = Dot(color=YELLOW).shift(UP * 2 + RIGHT * 2)
# 创建文本
t1 = Text("Hello,", color=BLUE)
t2 = Text("Manim!", color=YELLOW)
VGroup(t1, t2).arrange(RIGHT, buff=1)
# 将点添加到场景中
self.add(d1, d2)
# 等待1秒
self.wait()
# 淡入文本
self.play(FadeIn(t1, target_position=d1))
self.play(FadeIn(t2, target_position=d2))
如果是FadeOut
使用target_position
参数的话,元素会消失在上面示例中Dot
的位置。
2.4. FadeOut的scale 参数
这个示例演示了FadeOut
的scale
参数,分别展示了对象在淡出时缩小(scale=0.5)和放大(scale=1.5)的效果,
说明了该参数对淡出时对象缩放的控制作用。
s = Star(color=RED)
h = RegularPolygram(6, color=YELLOW)
vg = VGroup(s, h).arrange(RIGHT, buff=1)
self.play(Create(vg), run_time=run_time)
self.wait()
# 淡出五角星 scale=0.5
self.play(FadeOut(s, scale=0.5))
# 淡出六边形 scale=2
self.play(FadeOut(h, scale=2))
3. 附件
文中的代码只是关键部分的截取,完整的代码共享在网盘中(fade.py
),
下载地址: 完整代码 (访问密码: 6872)