Scratch 教程 -- 逐字化输出

news2024/11/20 4:27:05

        首先我们来探讨一下对于一个逐字化模块(自定义积木),有哪些需要设置的参数(请注意,在这里我会先提出一种常规且简便的写法,再进一步讲述其它的优化版本)

1.内容:对于一个文本,其内容是一定需要的(不然你还用啥逐字化啊对吧)。这里,内容也就是逐字化结束后所呈现出来的所有文字,换句话说就是你最终所要说出的完整的一句话。内容的介入形式很多样,可以通过列表、变量、乃至于直接输入的形式呈现出来,这里我们用三个积木进行举例:

        而在我们一会要讲到的逐字化中,逐字化模块的脚本会被放置在一个含有“内容”这一关键字(参数)自定义积木中,在调用模块时,按照你自己需要的方式将列表、变量或者是直接输入的文本放入对应的参数栏即可。

2.显示时长:任何不需要通过被其它代码打断的说话语句都会有一个说话时长,使其显示指定的一段时间。但是在设定不同角色或不同状态时,说话时长的值可以有所调整。因此这个参数值在很多时候还是有其设立的必要性的。所以自定义积木中也需要有“显示时长”这一参数

        以上两者是我认为使用自定义积木的方式所必要携带的两个参数值。其中"内容"更是重中之重(甚至当你不需要速度变化时,可以不用加入说话时长参数,只携带"内容"一个参数即可。这里考虑到普遍应用性,直接选择了双参数作为最底层的算法)。因此,自定义积木就可以华丽登场啦

逐字化自定义积木较为简单的写法(双参)

        接下来,我们开始探讨逐字化所需要的变量。这就要究逐字化本身的运行逻辑。一个理想的逐字化输出,是在开始时显示输出文本的第一个字符,在运行过程中不断以上一次显示出的文本为基础,跟进新的字符在整个文本中的位置,将其加入此次要显示的文本,从而最终显示所有字符。那么,显而易见,设置变量的关键就在于“显示的文本”“位置”

(先声明一下,这里的变量其实有更优解,只设“显示的文本”一者即可,参见文章后面的优化版本。在此处使用两个变量相当于拆解步骤,有助于萌新理解)

1.显示的文本:也就是逐字化每一步中实际显示出的话。举个通俗易懂的例子:在“Hello CCW!”这样一段文本中,逐字化模块第一次调用会显示出“H”,第二次则是“He”……每一次单独显示出来的文本,都由这个变量来进行传输。

2.逐字序号:其实就是上文提到的“位置”,只不过用了在sc中更容易理解的思维方式。它决定了每一次单独显示一段文本后,将要加入新的字符是什么。还是以刚才的“Hello CCW!”为例。显示“H”后,逐字序号升为2,下一步会用逐字序号调出“Hello CCW!”的第2个字符(即字母“e”)加入到要显示的文本中,从而显示出“He”。

        那么可以看到,逐字化的核心过程无非就是显示的文本逐字序号两个变量的循环运转。因此,我们可以通过如下代码实现刚才提到的效果:

逐字化变量变化的核心过程

        然后,直接衔接输出语句的代码,也就是“说___()秒”的脚本——

衔接输出语句

        这样,整个逐字化的效果已经可以直观呈现了。现在我们加上重复执行,让它运转起来。但是要注意,重复执行的次数一定是内容的字符数,这样才不会引发一些因循环次数导致的不必要的bug

重复执行,运转逐字化

        做到这里,心急的小伙伴可能直接就将上述代码接到自定义积木下面了。但是不要着急,别忘了关键的初始化:

添加初始化,现在整个模块趋近于完整了

        现在,用按下绿旗等各种事件调用逐字化模块,并在内容显示时长的两个空白处添加你预设的文本数值就可以啦。以下是非常简单的双参逐字化的完整写法:

两个参数,两个变量,实现效果

        版本优化:你还可以引入下列参数去完善你要实现的功能,如:每一次输出的等待时长,完成逐字化后的等待时长等

        当然,你也可以尝试使用速度(speed)等待时间等其它变量来实现同样,或更优的效果。这里我搜集了三位社区里其他出过逐字化教程同学的写法,这些写法各有利弊,大家可以酌情自取:

        这段代码在变量和一些参数命名使用途径上与我们的双参写法从物理意义上是等效的。但是在他的这一版本写法中引入了等待时长(n)和单次输出字数(a)这两个新的参数。前者可以用于每次输出文本之间的时长间距,后者可以限定每一次更新文本加入的字符数。相较于双参写法,难度稍有上升,但是实现出来的效果还是非常理想的,有利于剧情推进时视觉上的表现力

        最重要的是,他将我们的“逐字序号”“当前输出的话”两个变量合为一者,直接使用“要说的话的字符数+a(在我们的脚本中a=1)”实现了这一功能。

        我在网上搜集的写法相比而言就更加贴近我们的写法了,也是使用了同样的双参和双变量,难度偏低,唯一区别在于代码的最后,他加上了一个额外的等待时间参数,防止玩家未看清文本内容就隐藏的情况发生。

        我又改为一种常用编程思想——递归。这种写法的效率我并没有进行实测(感觉会高一些),但是能够肯定的是,这里的递归算法运用得非常恰当。而且还是建议大家效仿一下这位同学,用英语命名变量和参数吧(至少看起来专业一些?哈哈哈,虽然我也习惯用中文)


最后,还记得在文章前面我提到过,我们的写法精简后,只用一个变量就可以实现等效功能。在这里我用两张图简述一下原理以及精简后的成品效果——

等效代码,可以减少一个变量

成品效果

如果你对两者等效的原因能够理解的话,更建议你直接用一个变量实现功能。


补充:所以我又重新写了一个新的版本:

这样效果就非常出色了


        好啦,那么我的文章就到这里了,欢迎大家在评论区积极留言提出自己的见解或对这篇教程的评价。喜欢的话记得收藏~谢谢大家啦~

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

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

相关文章

新概念英语的网盘资源

新版新概念英语1-4册全部视频和课本_免费高速下载|百度网盘-分享无限制百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/18wyeA#l…

C++STL——deque容器详解

纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 💬文章目录 一.deque容器的基本概念二.deque容器常用操作①deque构造函数②deque元素操作③deque赋值操作④deque交换操作⑤deque大小操作⑥deque插入和删除…

使用IPSEC VPN 在有防火墙的场景和有NAT转换的场景下实现隧道通信实验

目录 一、在有防火墙的场景 1、为所有设备配置对应ip地址: 2、进入两个防火墙实现公网互通 3、测试公网是否互通 4、进入SW1配置IPSEC VPN 5、进入SW2配置IPSEC VPN 6、配置策略方向ESP的流量 7、尝试使用PC1访问PC2 二、在有NAT地址转换的场景 1、为新增加…

C语言中的数据类型有哪些?

有符号数signed可以存储负数,无符号数呢只能存储非负数 我们要考虑两个问题。 第一个问题是要存储的这个整数,它是一个多大的范围,比如说要存储一个五。还有比如说我可能要算个数65535,或者说我要算出一个数65536,可能…

Cilium系列-11-启用带宽管理器

系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, 可以进一步提升 Cilium 的网络性能. 具体调优项包括不限于: 启用本地路由(Native Routing)完全替换 KubeProx…

P-DQN:离散-连续混合动作空间的独特算法

一、说明 本文首先说明DQN是个什么概念, DQN(Deep Q-Network)是一种基于深度学习的强化学习算法,在游戏AI中表现优异,如AlphaGo。然后说明人物动作预测的算法实现方法。 二、关于DQN的概念和实验 DQN(Deep …

混合精度训练中的内存占用

结论: 在模型训练中,fp16会比fp32快很多,因此,一般会使用fp16的参数进行模型的前向和后向计算。然而,在进行梯度累加的时候,fp16往往会精度不够,无法满足计算需求。因此,会在反向计…

SOLIDWORKS等轴测剖切视图的创建技巧

在SOLIDWORKS工程图中,经常会用到等轴测剖切视图来显示零件或装配体的内部结构,下面介绍一下两种创建方式,供大家参考,以下图为例。 方法一 第一步,打开零件,创建一个切除拉伸的配置,该配置为 …

全网超细,Jenkins持续集成-自动化测试(详细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 执行集成构建 持…

计算机top命令

top 快捷键 1 核心参数 1 1 参考资料 [1]. https://blog.csdn.net/weixin_45465395/article/details/115728520 [2].https://www.cnblogs.com/liushui-sky/p/13224762.html

为了规避风险,如何给大模型打水印?

大型语言模型,如最近开发的ChatGPT,可以撰写文件、创建可执行代码和回答问题,通常具有人类般的能力。 随着这些大模型的应用越来越普遍,越来越大的风险也显现了出来,它们可能被用于恶意目的。这些恶意目的包括&#xf…

uni-app选择器( uni-data-picker)选择任意级别

背景说明 uni-app 官方的插件市场有数据驱动选择器,可以用作多级分类的场景。引入插件后,发现做不到只选择年级,不选择班级(似乎,只能到最后子节点了)。 需求中,有可能选择的不是叶子。比如&a…

渣罐炉倾翻液压系统比例阀控制器

渣罐炉倾翻液压系统是一种用于渣罐炉倾翻的液压系统,由液压泵、油缸、阀组、油箱、管路等组成。 2. 启动液压泵,将液压油输送到油缸。 总之,渣罐炉倾翻液压系统具有操作简便、高效稳定等特点,适用于各种类型的渣罐炉倾翻。

SpringBoot+Vue开发笔记

参考:https://www.bilibili.com/video/BV1nV4y1s7ZN?p1 ----------------------------------------------------------概要总结---------------------------------------------------------- 1、MVC架构: View:与用户交互 Controller&…

浅谈下API初步认知

当我们谈论API,我们指的是应用程序接口(Application Programming Interface)。API允许不同的软件应用程序之间互相通信和交互。它定义了一组规定和协议,用于确定数据传输和请求的格式、方法和功能。 API的作用是在软件开发中提供一…

运动蓝牙耳机什么款式好、适合运动的蓝牙耳机推荐

夏天到了,越来越多的年轻人会选择在一天的忙碌之后通过简单的运动缓解疲劳。而在运动装备的选择上,除了常规的衣服、鞋之外,耳机也成为了当下年轻群体的必备项,尤其是在运动的过程中听听喜欢的音乐或者电台能够更好地放松身心。那…

Go init 顺序 使用建议

init函数的主要作用: 初始化不能采用初始化表达式初始化的变量。程序运行前的注册,例如初始化数据库链接。实现sync.Once功能。其他 init函数的主要特点: init函数先于main函数自动执行,不能被其他函数调用;init函数…

LeetCode每日一题Day3——1. 两数之和

✨博主:命运之光 🦄专栏:算法修炼之练气篇(C\C版) 🍓专栏:算法修炼之筑基篇(C\C版) 🐳专栏:算法修炼之练气篇(Python版) …

Java编程常用数据转换:String与int互转、Date与String互转、BigDecimal与int比较

一、String与Int互转 在 Java 中要将 String 类型转化为 int 类型时,需要使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换。 String str "555555555"; int a Integer.parseInt(str); // 方式1 int b Integer.valueOf(str).intValu…

从虚拟到现实:数字孪生助力建筑创新

随着科技的不断进步,数字孪生技术正逐渐成为建筑行业的新宠。数字孪生是一种将实体世界与数字世界相结合的技术,通过将现实世界中的物体、系统或过程以数字化的方式进行建模和仿真,实现了真实世界与虚拟世界的互通。 在建筑行业中&#xff0c…