manim_zh_doc
  • 如何安装manim
  • 快速使用
  • 最佳实践
    • Basic Concepts
      • ManimCELogo
      • BraceAnnotation
      • VectorArrow
      • GradientImageFromArray
      • BooleanOperations
    • Animations
      • PointMovingOnShapes
      • MovingAround
      • MovingAngle
      • MovingDots
      • MovingGroupToDestination
      • MovingFrameBox
      • RotationUpdater
      • PointWithTrace
    • Plotting
      • SinAndCosFunctionPlot
      • ArgMinExample
      • GraphAreaPlot
      • PolygonOnAxes
      • HeatDiagramPlot
  • 教程 And 指导
    • 快速使用
      • 概述
      • 新建Project
      • 制作动画
      • 解释
      • 正方形转换圆
      • 定位Mobject
      • 使用.animate语法进行动画处理
      • Transform与ReplacementTransform
    • 输出设置
      • Manim 输出文件夹
      • 章节
      • 命令行标志
    • Manim 的构建块
      • Mobjects
        • 创建和显示 mobjects
        • 放置 mobjects
        • 设置 mobject 的样式
        • Mobject 屏幕顺序
      • 动画
        • 制作方法动画
        • 动画运行时间
        • 创建自定义动画
        • 使用 mobject 的坐标
        • 将 mobject 转换为其他 mobject
      • 场景
  • 进阶指南
    • 配置
      • 命令行参数
        • 高级示例
        • 所有 CLI 标志的列表
      • ManimConfig 类
      • 配置文件
    • 深入了解 Manim 的内部结构
      • 介绍
      • 概述
      • Page
Powered by GitBook
On this page
  1. 教程 And 指导
  2. 快速使用

使用.animate语法进行动画处理

本教程的最后一课是使用.animate , 一种Mobject方法对您对Mobject所做的更改进行动画处理。当您在修改.animate 的方法调用之前添加任何该方法将变为动画,可以使用self.play播放。让我们返回SquareToCircle来看一下在创建 Mobject时使用.animate方法。

  1. 打开 scene.py,并在SquareAndCircle类下方添加以下代码片段:

class AnimatedSquareToCircle(Scene):
    def construct(self):
        circle = Circle()  # create a circle
        square = Square()  # create a square

        self.play(Create(square))  # show the square on screen
        self.play(square.animate.rotate(PI / 4))  # rotate the square
        self.play(Transform(square, circle))  # transform the square into a circle
        self.play(
            square.animate.set_fill(PINK, opacity=0.5)
        )  # color the circle on screen
  1. 通过在命令行中运行以下命令进行渲染AnimatedSquareToCircle:

manim -pql scene.py AnimatedSquareToCircle

第一个self.play创建正方形。第二个动画将其旋转 45 度。第三个将正方形转换为圆形,最后一个将圆形着色为粉红色。尽管最终结果与SquareToCircle相同,但.animate显示rotate并set_fill动态应用于Mobject ,而不是创建它们在已应用更改的情况下。

尝试其他方法(如flip 或shift ),看看会发生什么。

  1. 打开 scene.py,并在AnimatedSquareToCircle类下方添加以下代码片段:

class DifferentRotations(Scene):
    def construct(self):
        left_square = Square(color=BLUE, fill_opacity=0.7).shift(2 * LEFT)
        right_square = Square(color=GREEN, fill_opacity=0.7).shift(2 * RIGHT)
        self.play(
            left_square.animate.rotate(PI), Rotate(right_square, angle=PI), run_time=2
        )
        self.wait()
  1. 通过在命令行中运行以下命令进行渲染:DifferentRotations

manim -pql scene.py DifferentRotations

这个Scene说明了.animate的怪癖。当使用 .animateManim实际上采用Mobject 的起始状态和结束状态,并将两者进行插值。在AnimatedSquareToCircle类中,当正方形旋转时,你可以观察到这一点:正方形的角在移动到所需的位置时似乎略微收缩,以便第一个正方形转换为第二个正方形。

在 DifferentRotations中,对.animate 旋转的解释与Rotate方法之间的差异要明显得多。Mobject旋转 180 度的开始和结束状态 相同,因此尝试插入两个相同的对象,结果是左方格。 如果您发现自己对.animate的使用导致了类似的不受欢迎的行为,请考虑 使用传统的动画方法,例如使用Rotate 。

Previous定位MobjectNextTransform与ReplacementTransform

Last updated 22 days ago