问题描述
我是 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,txt2)
也应该有效。在这种情况下,由于 Python 中作用域的工作方式,self
中的 Replace
指的是传递给 self
方法的 construct
参数。在前面的示例中,Replace
有自己的 self
参数,self
参数屏蔽了传递给 construct
的参数和 {{1} 中的 self
} 指的是 Replace
的 Replace
。 (默认情况下没有任何值,除非在调用 self
时给出一个值。实际上,当您尝试运行代码时,您可能会遇到以下错误
Replace
)
另一种可能性是在 TypeError: Replace() missing 1 required positional argument: 'mObj2'
类内部定义 Replace
,但在 q
方法外部:
construct
另外,如果你只是想用一些没有动画的新文本替换初始文本(甚至没有淡入淡出),那么你可以使用
class q(Scene):
def Replace(self,mObj2):
self.play(FadeIn(mObj1),FadeOut(mObj2))
def construct(self):
txt1 = Text("HI")
txt2 = Text("HI2")
self.play(FadeIn(txt1))
self.Replace(txt1,txt2)
一个更复杂的选择是创建一个使用两个 MObject 实例化的自定义 self.remove(txt1)
self.add(txt2)
类,并淡出第一个,同时淡入第二个。
Animation
然后你可以使用
class FadingReplace(Animation):
def __init__(self,obj1,obj2,...):
pass
#implementation left as an exercise for the reader