コード例 #1
0
def turn_animation_into_updater(animation: Animation,
                                cycle: bool = False,
                                **kwargs) -> Mobject:
    """
    Add an updater to the animation's mobject which applies
    the interpolation and update functions of the animation

    If cycle is True, this repeats over and over.  Otherwise,
    the updater will be popped uplon completion
    """
    mobject = animation.mobject
    animation.update_config(**kwargs)
    animation.suspend_mobject_updating = False
    animation.begin()
    animation.total_time = 0

    def update(m, dt):
        run_time = animation.get_run_time()
        time_ratio = animation.total_time / run_time
        if cycle:
            alpha = time_ratio % 1
        else:
            alpha = clip(time_ratio, 0, 1)
            if alpha >= 1:
                animation.finish()
                m.remove_updater(update)
                return
        animation.interpolate(alpha)
        animation.update_mobjects(dt)
        animation.total_time += dt

    mobject.add_updater(update)
    return mobject
コード例 #2
0
 def begin(self) -> None:
     self.ending_mobject = self.mobject.copy()
     Animation.begin(self)
     # Both 'start' and 'end' consists of the source and target mobjects.
     # At the start, the traget should be faded replacing the source,
     # and at the end it should be the other way around.
     start, end = self.starting_mobject, self.ending_mobject
     for m0, m1 in ((start[1], start[0]), (end[0], end[1])):
         self.ghost_to(m0, m1)