Grupos de animaciones
Hasta ahora hemos visto animaciones que ocurren o bien en paralelo o bien secuencialmente. ¿Qué ocurre si quiero lanzar animaciones de forma que una empiece antes de que termine la otra? ¿O si quiero que empiecen a la vez pero duren diferente? Para ello tenemos las clases AnimationGroup, LaggedStart, LaggedStartMap y Succession.
AnimationGroup
Sección titulada «AnimationGroup»Como su propio nombre nos indica, agrupa animaciones dentro de sí. Esto nos puede resultar útil si queremos tener animaciones que empiecen a la vez pero que tengan una duración distinta.
from manim import *
class AnimationGroupExample(Scene): def construct(self): dots = VGroup( [ Dot(color=random_color()) for _ in range(10) ] ).scale(3).arrange()
self.wait() self.play( AnimationGroup(*[Write(dot) for dot in dots[0:5]], run_time=2), AnimationGroup(*[Write(dot) for dot in dots[5:]], run_time=4), ) self.wait()LaggedStart
Sección titulada «LaggedStart»Con LaggedStart podemos lanzar varias animaciones secuencialmente pero separadas una cantidad de tiempo específica.
from manim import *
class LaggedStartExample(Scene): def construct(self): dots = VGroup( [ Dot(color=random_color()) for _ in range(10) ] ).scale(3).arrange()
self.wait() self.play( LaggedStart( *[Write(dot) for dot in dots[0:5]], *[FadeIn(dot) for dot in dots[5:]] ), run_time=5 ) self.wait()LaggedStartMap
Sección titulada «LaggedStartMap»Es similar a LaggedStart con la diferencia de que aquí aplicamos la misma animación a todos los objetos
from manim import *
class LaggedStartMapExample(Scene): def construct(self): dots = VGroup( [ Dot(color=random_color()) for _ in range(10) ] ).scale(3).arrange()
self.wait() self.play( LaggedStartMap( Write, dots ), run_time=5 ) self.wait()Succession
Sección titulada «Succession»Lanza las animaciones una tras otra. Nos ayuda a no tener que escribir muchas veces self.play.
from manim import *
class SuccessionExample(Scene): def construct(self): dots = VGroup( [ Dot(color=random_color()) for _ in range(10) ] ).scale(3).arrange()
self.wait() self.play( Succession( *[Write(dot) for dot in dots] ), run_time=5 ) self.wait()