You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Manim中拆分文本并移动,同时实现对象高亮发光效果?

一、实现对象短暂发光高亮后恢复

要实现对象短暂发光再恢复的效果,核心是用Succession组合高亮动画与恢复动画,或结合SaveState+Restore快速还原初始状态,以下是两种实用实现方式:

方式1:颜色+发光滤镜的高亮

from manim import *

class HighlightExample(Scene):
    def construct(self):
        line = Line(LEFT, RIGHT, color=WHITE)
        self.add(line)
        
        # 高亮动画:切换颜色+添加发光效果
        highlight = Succession(
            ApplyMethod(line.set_color, YELLOW),
            ApplyMethod(line.set_glow_factor, 0.5),
            run_time=0.3
        )
        # 恢复动画:还原颜色与发光强度
        restore = Succession(
            ApplyMethod(line.set_glow_factor, 0),
            ApplyMethod(line.set_color, WHITE),
            run_time=0.3
        )
        
        # 组合执行:高亮→停顿→恢复
        self.play(highlight)
        self.wait(1)
        self.play(restore)

方式2:SaveState+Restore简化流程

如果需要快速保存并还原对象初始状态,用SaveState和Restore更高效:

from manim import *

class HighlightWithRestore(Scene):
    def construct(self):
        dot = Dot(ORIGIN, color=BLUE)
        self.add(dot)
        
        self.play(SaveState(dot))
        # 高亮效果:放大+变色+发光
        self.play(dot.animate.scale(1.5).set_color(RED).set_glow_factor(0.6))
        self.wait(1)
        # 一键恢复初始状态
        self.play(Restore(dot))

二、拆分文本并移动到不同位置

拆分文本有两种思路,可根据场景选择:

方式1:拆分字符串分别创建文本

适合提前明确拆分位置的场景:

from manim import *

class SplitTextExample(Scene):
    def construct(self):
        # 拆分原文本为两个独立文本对象
        part1 = Text("Hello", color=GREEN)
        part2 = Text("World", color=PURPLE)
        
        # 初始拼接成完整文本样式
        part2.next_to(part1, RIGHT, buff=0.2)
        self.add(part1, part2)
        
        # 移动到目标位置
        self.play(
            part1.animate.move_to(UP + LEFT),
            part2.animate.move_to(DOWN + RIGHT),
            run_time=1
        )
        self.wait()

方式2:拆分已创建的完整Text对象

如果已有完整Text对象,可直接用split方法拆分:

from manim import *

class SplitExistingText(Scene):
    def construct(self):
        full_text = Text("Manim is Awesome", color=ORANGE)
        self.add(full_text)
        self.wait(0.5)
        
        # 按空格拆分文本,得到子文本对象列表
        text_parts = full_text.split()
        
        # 将各部分移动到不同位置
        self.play(
            text_parts[0].animate.move_to(UP + LEFT),
            text_parts[1].animate.move_to(UP + LEFT + DOWN*0.5),
            text_parts[2].animate.move_to(DOWN + RIGHT),
            run_time=1.2
        )
        self.wait()

内容的提问来源于stack exchange,提问作者Riyan Nayak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:37:17