Manim,不带变换的替换变换
Manim, ReplacementTransform without Transform
我是 manim 的新手。
与以下示例一样,
class scene_example(Scene):
def construct(self):
txt1 = Text("Text1")
txt2 = Text("Change to this text without animation")
self.play(FadeIn(txt1))
self.play(ReplacementTransform(txt1, txt2))
有没有方便的功能把txt1“替换”成txt2? (即没有“变形”动画?)
class scene_example(Scene):
def construct(self):
txt1 = Text("Text1")
txt2 = Text("Change to this text without animation")
self.play(FadeIn(txt1))
self.play(FadeOut(txt1), FadeIn(txt2) )
这段代码会做我想做的,但我觉得可能会有类似 ReplacemnetTransform 的功能来实现简单的“替换”动画。我尝试为 FadeIn 和 FadeOut 创建一个函数,但是那不起作用。
class q(Scene):
def construct(self):
def Replace(self, mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
txt1 = "HI"
txt2 = "HI2"
self.play(FadeIn(txt1))
Replace(txt1, txt2)
在您尝试编写的代码中:
class q(Scene):
def construct(self):
def Replace(self, mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
txt1 = Text("HI")
txt2 = Text("HI2")
self.play(FadeIn(txt1))
Replace(txt1, txt2)
参数 self
不会自动传递给 Replace
函数。一种解决方案是更换
Replace(txt1, txt2)
和
Replace(self, txt1, txt2)
.
另一种选择是根本不让 Replace
使用 self 参数。代码
class q(Scene):
def construct(self):
def Replace(mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
txt1 = Text("HI")
txt2 = Text("HI2")
self.play(FadeIn(txt1))
Replace(txt1, txt2)
应该也可以。在这种情况下,由于 python 中作用域的工作方式,Replace
中的 self
指的是传递给 construct
方法的 self
参数。在前面的示例中,Replace
有自己的 self
参数,self
参数屏蔽了传递给 construct
的参数,self
在 [=17= 中]指的是Replace
的self
。 (默认情况下没有任何值,除非在调用 Replace
时给出一个值。事实上,当您尝试 运行 您的代码时,您可能会遇到如下错误
TypeError: Replace() missing 1 required positional argument: 'mObj2'
)
另一种可能性是在 q
class 内部定义 Replace
,但在 construct
方法之外:
class q(Scene):
def Replace(self, mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
def construct(self):
txt1 = Text("HI")
txt2 = Text("HI2")
self.play(FadeIn(txt1))
self.Replace(txt1, txt2)
此外,如果您只想用一些完全没有动画(甚至没有淡入和淡出)的新文本替换初始文本,那么您可以使用
self.remove(txt1)
self.add(txt2)
一个更复杂的选项是创建一个自定义 Animation
class,它用两个 MObject 实例化,并在淡入第二个的同时淡出第一个。
class FadingReplace(Animation):
def __init__(self, obj1, obj2, ...):
pass
#implementation left as an exercise for the reader
那么你可以使用
self.play(FadingReplace(txt1, txt2))
我是 manim 的新手。
与以下示例一样,
class scene_example(Scene):
def construct(self):
txt1 = Text("Text1")
txt2 = Text("Change to this text without animation")
self.play(FadeIn(txt1))
self.play(ReplacementTransform(txt1, txt2))
有没有方便的功能把txt1“替换”成txt2? (即没有“变形”动画?)
class scene_example(Scene):
def construct(self):
txt1 = Text("Text1")
txt2 = Text("Change to this text without animation")
self.play(FadeIn(txt1))
self.play(FadeOut(txt1), FadeIn(txt2) )
这段代码会做我想做的,但我觉得可能会有类似 ReplacemnetTransform 的功能来实现简单的“替换”动画。我尝试为 FadeIn 和 FadeOut 创建一个函数,但是那不起作用。
class q(Scene):
def construct(self):
def Replace(self, mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
txt1 = "HI"
txt2 = "HI2"
self.play(FadeIn(txt1))
Replace(txt1, txt2)
在您尝试编写的代码中:
class q(Scene):
def construct(self):
def Replace(self, mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
txt1 = Text("HI")
txt2 = Text("HI2")
self.play(FadeIn(txt1))
Replace(txt1, txt2)
参数 self
不会自动传递给 Replace
函数。一种解决方案是更换
Replace(txt1, txt2)
和
Replace(self, txt1, txt2)
.
另一种选择是根本不让 Replace
使用 self 参数。代码
class q(Scene):
def construct(self):
def Replace(mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
txt1 = Text("HI")
txt2 = Text("HI2")
self.play(FadeIn(txt1))
Replace(txt1, txt2)
应该也可以。在这种情况下,由于 python 中作用域的工作方式,Replace
中的 self
指的是传递给 construct
方法的 self
参数。在前面的示例中,Replace
有自己的 self
参数,self
参数屏蔽了传递给 construct
的参数,self
在 [=17= 中]指的是Replace
的self
。 (默认情况下没有任何值,除非在调用 Replace
时给出一个值。事实上,当您尝试 运行 您的代码时,您可能会遇到如下错误
TypeError: Replace() missing 1 required positional argument: 'mObj2'
)
另一种可能性是在 q
class 内部定义 Replace
,但在 construct
方法之外:
class q(Scene):
def Replace(self, mObj1, mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
def construct(self):
txt1 = Text("HI")
txt2 = Text("HI2")
self.play(FadeIn(txt1))
self.Replace(txt1, txt2)
此外,如果您只想用一些完全没有动画(甚至没有淡入和淡出)的新文本替换初始文本,那么您可以使用
self.remove(txt1)
self.add(txt2)
一个更复杂的选项是创建一个自定义 Animation
class,它用两个 MObject 实例化,并在淡入第二个的同时淡出第一个。
class FadingReplace(Animation):
def __init__(self, obj1, obj2, ...):
pass
#implementation left as an exercise for the reader
那么你可以使用
self.play(FadingReplace(txt1, txt2))