马尼姆 set_z_index 与 value_tracker
manim set_z_index with value_tracker
value_tracker 似乎在最后一小段时间更改其值时没有考虑到 z.index,我真的不明白为什么。我故意添加了很多 set_z_index(1) 来尝试解决它,但什么也没做。这是该问题的一种极简主义示例:
from manim import *
class RatioHF(MovingCameraScene):
def bar_mouvante(self, x_position, y_position, pourcentage_homme):
rectangle_de_base = \
Rectangle(height=1, width=4,
stroke_color=BLACK).move_to([x_position, y_position, 0]).set_fill(PINK, opacity=0.8)
remplissage_de_base = \
Rectangle(height=1, width=2,
stroke_color=BLACK).move_to([x_position-1, y_position, 0]).set_fill(BLUE, opacity=0.8)
tracker = ValueTracker(0.5).set_z_index(1)
pourcentage_de_base = DecimalNumber(0.5, color=BLACK).move_to(remplissage_de_base.get_critical_point(LEFT) +
np.array([0.5, 0, 0])).set_z_index(1)
pourcentage_de_base.add_updater(lambda m: m.set_value(tracker.get_value())).set_z_index(1)
self.play(FadeIn(rectangle_de_base, remplissage_de_base, pourcentage_de_base))
self.play(
AnimationGroup(
remplissage_de_base.animate.become(
Rectangle(height=remplissage_de_base.height,
width=pourcentage_homme*4,
stroke_color=BLACK).align_to(rectangle_de_base, LEFT+UP).set_fill(BLUE, opacity=0.8)
),
tracker.animate.set_value(pourcentage_homme).set_z_index(1)
)
)
self.wait()
def construct(self):
self.wait()
self.bar_mouvante(0, 0, 0.8)
self.wait()
AnimationGroup
时不时会做一些很奇怪的事情。在这个特定的例子中,它打乱了渲染的对象顺序(不幸的是,这是一个特别常见的副作用)。如果你不是绝对必须使用它,请避免使用它。
在这种情况下,您只需将播放调用更改为
self.play(
remplissage_de_base.animate.become(
Rectangle(height=remplissage_de_base.height,
width=pourcentage_homme*4,
stroke_color=BLACK).align_to(rectangle_de_base, LEFT+UP).set_fill(BLUE, opacity=0.8)
),
tracker.animate.set_value(pourcentage_homme)
)
它应该可以工作。
请注意,设置 ValueTracker
的 z_index
不会执行任何操作; ValueTracker 是一个不可见的辅助对象;实际相关的对象是 DecimalNumber
.
value_tracker 似乎在最后一小段时间更改其值时没有考虑到 z.index,我真的不明白为什么。我故意添加了很多 set_z_index(1) 来尝试解决它,但什么也没做。这是该问题的一种极简主义示例:
from manim import *
class RatioHF(MovingCameraScene):
def bar_mouvante(self, x_position, y_position, pourcentage_homme):
rectangle_de_base = \
Rectangle(height=1, width=4,
stroke_color=BLACK).move_to([x_position, y_position, 0]).set_fill(PINK, opacity=0.8)
remplissage_de_base = \
Rectangle(height=1, width=2,
stroke_color=BLACK).move_to([x_position-1, y_position, 0]).set_fill(BLUE, opacity=0.8)
tracker = ValueTracker(0.5).set_z_index(1)
pourcentage_de_base = DecimalNumber(0.5, color=BLACK).move_to(remplissage_de_base.get_critical_point(LEFT) +
np.array([0.5, 0, 0])).set_z_index(1)
pourcentage_de_base.add_updater(lambda m: m.set_value(tracker.get_value())).set_z_index(1)
self.play(FadeIn(rectangle_de_base, remplissage_de_base, pourcentage_de_base))
self.play(
AnimationGroup(
remplissage_de_base.animate.become(
Rectangle(height=remplissage_de_base.height,
width=pourcentage_homme*4,
stroke_color=BLACK).align_to(rectangle_de_base, LEFT+UP).set_fill(BLUE, opacity=0.8)
),
tracker.animate.set_value(pourcentage_homme).set_z_index(1)
)
)
self.wait()
def construct(self):
self.wait()
self.bar_mouvante(0, 0, 0.8)
self.wait()
AnimationGroup
时不时会做一些很奇怪的事情。在这个特定的例子中,它打乱了渲染的对象顺序(不幸的是,这是一个特别常见的副作用)。如果你不是绝对必须使用它,请避免使用它。
在这种情况下,您只需将播放调用更改为
self.play(
remplissage_de_base.animate.become(
Rectangle(height=remplissage_de_base.height,
width=pourcentage_homme*4,
stroke_color=BLACK).align_to(rectangle_de_base, LEFT+UP).set_fill(BLUE, opacity=0.8)
),
tracker.animate.set_value(pourcentage_homme)
)
它应该可以工作。
请注意,设置 ValueTracker
的 z_index
不会执行任何操作; ValueTracker 是一个不可见的辅助对象;实际相关的对象是 DecimalNumber
.