manim边做边学--文字创建销毁的打字机效果

news/2025/11/6 14:07:53/文章来源:https://www.cnblogs.com/wang_yb/p/19196404

对于Manim的用户来说,创建富有表现力的文本动画是其核心功能之一。

最近,Manim的官方文档中悄然增加了两个新的动画类:TypeWithCursorUntypeWithCursor

它们为我们带来了带有光标的打字和删除效果,极大地丰富了文本动画的可能性。

本文将深入探讨这两个新动画类的特性和应用。

1. 动画概要

TypeWithCursorUntypeWithCursor 的核心作用是模拟真实的打字和删除文本的过程。

相比于Manim中已有的WriteUnWrite等动画,它们最大的特点是引入了“光标”这一视觉元素,使得动画效果更加生动和贴近现实。

TypeWithCursor 类似于 AddTextLetterByLetter,可以逐个字符地显示文本,并在当前输入的最后一个字符后面显示一个光标。

这非常适合用于以下场景:

  • 代码演示: 在教学视频或技术分享中,模拟实时编写代码的过程,让观众更清晰地看到代码的输入流程。
  • 对话模拟: 模拟聊天对话框、终端输入等场景,增强动画的代入感。
  • 逐字稿展示: 配合旁白,以打字机的方式逐字显示字幕或关键信息,引导观众的阅读节奏。

UntypeWithCursor 则与TypeWithCursor相反,它类似于RemoveTextLetterByLetter,可以逐个字符地删除文本,并且光标会跟随删除的进度移动。

其应用场景包括:

  • 文本修正: 模拟删除并修改错误文本的过程,可以用于展示“纠错”或“优化”的概念。
  • 信息擦除: 动态地擦除屏幕上的信息,为新的内容腾出空间。
  • 倒计时效果: 通过删除数字来实现倒计时的视觉效果。

这两个类的主要参数类似:

参数名称 类型 说明
time_per_char float 字母出现的频率
cursor VMobject None
buff float 控制光标在最后添加的字母右侧的距离。
keep_cursor_y bool 光标的 y 坐标设置是否为文本的中心,并在整个动画中保持不变
leave_cursor_on bool 是否在动画后显示光标

需要注意的是:目前这两个动画类仅支持对Text对象进行操作,暂时还不支持MathTex

2. 使用示例

下面,我们将通过两个实际的应用场景,来展示TypeWithCursorUntypeWithCursor的使用方法。

2.1. 模拟代码输入与修正

这个例子将模拟一个在终端中输入Python代码,然后发现错误并进行修正的过程。

我们将使用TypeWithCursor来输入代码,然后用UntypeWithCursor删除错误部分,最后再用TypeWithCursor输入正确的代码。

cursor = Rectangle(height=0.5, width=0.05, fill_color=WHITE, fill_opacity=1, stroke_width=0
)# 错误的Python代码
wrong_code_line = Text("prtin('Hello, Manim!')", font="Monospace").scale(0.7)
# 正确的代码部分
correct_part = (Text("print", font="Monospace").scale(0.7).move_to(wrong_code_line[0:5], aligned_edge=LEFT)
)# 设置光标初始位置
cursor.move_to(wrong_code_line.get_left() + LEFT * 0.1)# 动画过程
self.play(TypeWithCursor(wrong_code_line, cursor, time_per_char=0.15))
self.wait()
# 删除错误的 'prtin'
self.play(UntypeWithCursor(wrong_code_line[0:5], cursor, time_per_char=0.1))
self.wait()
# 输入正确的 'print'
self.play(TypeWithCursor(correct_part, cursor, time_per_char=0.15))

在这个例子中,我们自定义了一个白色的细长矩形作为光标。

通过time_per_char参数,我们控制了打字和删除的速度,使得动画更具节奏感。

同时,通过对Text对象进行切片,我们精确地控制了需要删除和重新输入的文本部分。

2.2. 动态标题展示

这个例子将展示如何使用TypeWithCursorUntypeWithCursor来制作一个动态的、引人注目的标题。

我们将先用打字效果展示一个标题,然后将其删除,再展示另一个标题,并在动画间隙播放光标闪烁动画。

# 自定义一个黄色的下划线作为光标
cursor = Line(DOWN * 0.1, RIGHT * 0.2 + DOWN * 0.1, color=YELLOW)# 第一个标题
title1 = Text("Welcome to My Channel", font_size=30)# 第二个标题
title2 = Text("Let's Learn Manim!", font_size=30, color=BLUE)# 动画过程
# 播放打字动画
self.play(TypeWithCursor(title1, cursor, keep_cursor_y=True, time_per_char=0.1))
# 在等待期间播放光标闪烁动画
self.play(Blink(cursor, blinks=3))
# 播放删除动画
self.play(UntypeWithCursor(title1,cursor,keep_cursor_y=True,time_per_char=0.05,leave_cursor_on=True,)
)
# 再次播放光标闪烁
self.play(Blink(cursor, blinks=3))
# 播放第二个标题的打字动画
self.play(TypeWithCursor(title2, cursor, buff=0.2, time_per_char=0.12))
# 结束时再次闪烁
self.play(Blink(cursor))

在这个例子中,我们使用了一个黄色的Line作为光标,并通过Blink动画使其闪烁。

在动画中,我们设置keep_cursor_y=True来确保光标在y轴方向上保持稳定,这在处理多行文本时非常有用。

我们还通过调整buff参数增大了光标和文字的间距,并通过leave_cursor_on=True让光标在删除动画后依然停留在屏幕上,为接下来的输入动画做好了衔接。

3. 附件

文中的代码只是关键部分的截取,完整的代码共享在网盘中(type_cursor.py),

下载地址: 完整代码 (访问密码: 6872)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年铝瓦楞板厂家推荐:5家正规铝瓦楞板厂商实力解析

在工业建筑、仓储空间与公共设施的建设中,铝瓦楞板凭借轻质耐用、抗风抗震的特性成为核心建材之一。面对市场上鱼龙混杂的供应商,如何找到专业的铝瓦楞板厂家?以下是2025年值得关注的5家正规厂商排名,帮你避开选择…

2025年河北泵用挤压软管体验权威推荐:河北抽负压真空胶管清洁/河北抽真空胶管安装/河北真空侵胶管维护源头厂家精选

泵用挤压软管作为工业输送系统的关键部件,凭借其卓越的耐压性能、优异的耐磨特性和广泛的介质适应性,在液压传动、流体输送、化工泵送、工程机械等领域发挥着不可或缺的作用。本文将基于行业标准与技术规范,为您深入…

2025年移动照明车灯塔工厂权威推荐:液压升降移动照明车/拖车式移动照明车/太阳能移动照明车源头厂家精选

移动照明车灯塔作为现代工程施工与应急照明的重要装备,凭借其卓越的机动性能、强大的照明效果和可靠的环境适应性,在建筑施工、抢险救援、夜间作业、大型活动保障等领域发挥着不可替代的作用。本文将基于2025年行业数…

学习Hyperledger Fabric2.5

一、环境准备 1.安装环境包 sudo apt install curl(远程传输) git(代码拉取) vim(编辑器) docker-compose jq openssh-server(远程连接) -y 2.启动docker systemctl start docker 3.开机自启动 systemctl…

DHTMLX Gantt 9.1 的核心目标——在保持稳定性能的基础上,带来更智能的时间刻度优化、更灵活的任务渲染、更高效的实时协作能力及更完善的资源管理功能。

DHTMLX Gantt 9.1 的核心目标——在保持稳定性能的基础上,带来更智能的时间刻度优化、更灵活的任务渲染、更高效的实时协作能力及更完善的资源管理功能。在与众多开发者及企业客户的交流中,全球知名的前端UI控件服务…

量化选股与量化交易第857篇:通达信主升操盘 - Leone

通达信主升操盘主图多:EMA(C,3),COLORYELLOW; 空:EMA(C,5),COLOR00FF00; 均衡:EMA(空,5),COLORWHITE,; 章鱼1:=COUNT(CROSS(多,均衡),2)=1; 章鱼2:=COUNT(CROSS(空,均衡),2)=1; ZAI:=FILTER(章鱼1 AND 章鱼2,2); DRAWT…

【中大厂前端】Java常见面试题 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

量化选股与量化交易第858篇:通达信擒龙三把锁 - Leone

通达信擒龙三把锁主图擒龙锁11:=1; 擒龙锁12:=((((2*C)+HIGH)+LOW) / 4); 擒龙锁14:=LLV(LOW,5); 擒龙锁15:=HHV(HIGH,4); C1:=(EMA((((擒龙锁12-擒龙锁14)/(擒龙锁15-擒龙锁14))*100),4)*擒龙锁11),COLORRED,LINETHIC…

量化选股与量化交易第861篇:通达信绝杀大牛 - Leone

通达信绝杀大牛主图ZYG1:=CONST(LLV((IF(C< 300,(AMOUNT/V/100),EMA(C,1))),2)); ZYG2:=CONST(LLV((IF(C< 300,(AMOUNT/V/100),EMA(C,1))),4)); ZYG3:=EMA(MA(((C-MA(C,13))*100),7),1); ZYG4:=(CROSS(ZYG3,EMA(…

国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)

如果能将 CSV 自动转换为 PDF ,就能快速生成清晰、美观的报表,既节省手动排版时间,又能保持数据的专业呈现。本文将介绍如何使用 Spire.XLS for Java 实现这一过程——从加载 CSV 到输出高质量 PDF,仅需数行代码即…

Python 机器学习02 - 常见分类算法

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from skle…

系统基础文件属性(二)

系统基础优化知识 (二)系统重要目录介绍: /usr/local --- 存放安装第三方软件程序数据 系统安装部署软件方法:yum 4种安装方式 文件属性详细介绍: 1)文件类型介绍:有哪些文件分类 文件相关命令 2)文件用…

量化选股与量化交易第882篇:通达信量能趋势启动 - Leone

通达信量能趋势启动主图ZYG1:=REF(LOW,1); ZYG2:=SMA(ABS(LOW-ZYG1),3,1)/SMA(MAX(LOW-ZYG1,0),3,1)*100; ZYG3:=EMA(IF(CLOSE>REF(CLOSE,1)*1.02,ZYG2*10,ZYG2/10),3); ZYG4:=LLV(LOW,38); ZYG5:=HHV(ZYG3,38); ZY…

量化选股与量化交易第883篇:通达信顶底雷达 - Leone

通达信顶底雷达副图章鱼:LLV(LOW,10) NODRAW; 鱼哥:HHV(HIGH,25) NODRAW; 章鱼出:=3.2,COLORCYAN; STICKLINE(C>0,3.2,3.2,1,0),COLORFF1199; 清仓卖出:3.5,COLOR0088FF; 章鱼线:=EMA((CLOSE-章鱼)/(鱼哥-章鱼)*4,4…

量化选股与量化交易第878篇:通达信起爆点探测器 - Leone

起爆点探测器主图STICKLINE(C>=O,H,L,0,1), COLORRED; STICKLINE(C>=O,C,O,3,0), COLORRED; STICKLINE(C< O,H,L,0,0), COLORFFFF00; STICKLINE(C< O,C,O,3,0),COLORFFFF00; ZYG9:MA(CLOSE,5); ZYG31:=MA(…

量化选股与量化交易第879篇:通达信强势反转战法 - Leone

通达信强势反转战法主图N1:=20; N2:=60; 鱼哥1:=(LOW+HIGH+CLOSE)/3; X: MA(鱼哥1,5); A1: HHV(X,N1)COLORMAGENTA; A2: HHV(X,N2),COLORGREEN; A3: HHV(HIGH,N2)*0.98,COLOR0000FF; B1: LLV(X,N1); B2: LLV(LOW,N2)*1…

量化选股与量化交易第886篇:通达信收割机 - Leone

通达信收割机主图DRAWTEXT_FIX(1,0.005,0,0,所属风格:),COLORYELLOW; DRAWTEXT_FIX(1,0.06,0,0,FGBLOCK),COLORYELLOW; DRAWTEXT_FIX(1,0.005,0.05,0,所属概念:),COLORMAGENTA; DRAWTEXT_FIX(1,0.06,0.05,0,GNBLOCK),C…

量化选股与量化交易第888篇:通达信龙头趋势量化 - Leone

通达信龙头趋势量化主图DRAWGBK(C>0,RGB(0,10,10),RGB(88,0,0),0,0,0); DRAWGBK(C>0,RGB(40,120,20),RGB(00,00,00),0,0,1); DRAWGBK(C>0,RGB(80,100,120),RGB(00,00,00),0,0,1); DRAWKLINE(HIGH,OPEN,LOW,CL…

【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备 - 教程

【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

详细介绍:vue3和uniapp的生命周期

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …