python 实现自定义动画

mrfwxfqh  于 2022-10-30  发布在  Python
关注(0)|答案(2)|浏览(191)

Manim的Animation类调用在子类中实现的interpolate_submobject方法。
所以我实现了这个接口/协定:

class ScaleAction(Animation):
    def __init__(
        self,
        mobject: Mobject,
      **kwargs,
    ):
        super().__init__(mobject,**kwargs)

    def interpolate_submobject(
        self,
        submobject: Mobject,
        starting_submobject: Mobject,
        alpha: float,
    ):
        def action(array):
            return array *(1*(1-alpha)+2*alpha)

        submobject = starting_submobject.copy().apply_function(action)
        return self

但是,动画最终什么都没有做。我觉得我还没有完全理解合同。有什么想法吗?
您可以随意使用代码here in binder

pqwbnv8z

pqwbnv8z1#

传递给interpolate_submobject的子对象是您需要直接修改的子对象;重新分配变量将不会更改对象。通过将重新分配更改为

submobject.become(starting_submobject.copy().apply_function(action))

您动画将正常工作;我已经用一个简单的玩具例子进行了测试

class ScaleTest(Scene):
    def construct(self):
        s = Square()
        self.play(ScaleAction(s))
z4iuyo4d

z4iuyo4d2#

修改代码后,代码运行,但只输出一个正方形。未进行缩放。

相关问题