ManimCommunity/manim

Lagging animations with updaters and self.add

Open

#1.648 geöffnet am 7. Juni 2021

Auf GitHub ansehen
 (4 Kommentare) (0 Reaktionen) (0 zugewiesene Personen)Python (1.378 Forks)batch import
help wantedissue:bug

Repository-Metriken

Stars
 (17.820 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 90T 10h) (31 gemergte PRs in 30 T)

Beschreibung

Description of bug / unexpected behavior

Animations behave differently depending on the way the mobject was added to the scene. If I use self.play(Create(mobj)) there is no lag, if I use self.add(mobj) the animation lags in certain cases.

Expected behavior

IMHO there should be no difference between the two cases. Also, if using self.add is discouraged for objects that have updaters, we might consider printing a warning.

How to reproduce the issue

See the following code:

from manim import *

class Test(Scene):
    def construct(self):
        tracker = ValueTracker(-3)
        rect = Rectangle().set_x(tracker.get_value())
        label = Text("x")
        rect.add_updater(lambda m: m.set_x(tracker.get_value()))
        label.add_updater(lambda m: m.move_to(rect.get_center()))
        self.add(rect,label)
        self.play(tracker.animate.set_value(4))
        self.wait()
        self.play(FadeIn(rect))
        self.play(tracker.animate.set_value(-4))
        self.wait()
from manim import *

class Test(Scene):
    def construct(self):
        tracker = ValueTracker(-3)
        rect = Rectangle().set_x(tracker.get_value())
        label = Text("x")
        rect.add_updater(lambda m: m.set_x(tracker.get_value()))
        label.add_updater(lambda m: m.move_to(rect.get_center()))
        self.add(rect,label)
        self.play(tracker.animate.set_value(4))
        self.wait()
        #self.play(FadeIn(rect))
        self.add(rect)
        self.play(tracker.animate.set_value(-4))
        self.wait()

Additional media files

https://user-images.githubusercontent.com/52650214/120992430-e36a4300-c782-11eb-80e4-d228dae55858.mp4

Contributor Guide