多莉扩展
下面介绍多莉扩展。多莉扩展可以解决一些克隆体相关的问题。
点击编辑器左边的扩展库,在“Gandi 扩展”中可以找到多莉扩展。
点击多莉扩展的卡片,还可以在右边看到多莉扩展的教程:
多莉扩展的作用
1、实现克隆体之间信息的读取、设置:
原版的做法:
在中级篇中,我们通过使用列表来记录克隆体的信息,通过编号来读取敌人信息。例如:
这样做有一个小问题,就是敌人每增加一个属性,就需要创建一个额外的列表来记录信息,不太方便:
多莉的做法:
而多莉扩展就很好地解决了这个问题:将数据直接携带在克隆体上,并且直接通过属性的名字来获取属性。
例如,通过下面的积木,读取某个敌人克隆体的“血量”,以及将该克隆体的“血量”设为 100:
id 是标识不同个体的唯一编码。
例如,每个人都有身份证,身份证就是人的 id;每个学生都有学号,学号就是学生的 id。
再比如,共创世界中,每个用户都有自己的 ID。例如 Arkos 在 CCW 的 ID 是 203945102。
在 Scratch 中,每个角色、克隆体也拥有一个自己的 id,这个 id 通常是随机生成的一串字符,看起来像乱码。可以使用 id 来代表某个特定的克隆体。
什么是 key、value:
Key 意思是键,这里表示数据的名称;
Value 则是值,即数据的值。
比如,设置 “id 为 xx 的克隆体的 key = 血量, value = 100”,意思就是给该克隆体添加一个名为“血量”的数据,值为 100.
通过下面的积木获取当前角色或克隆体的 id:
通过下面的积木,可以给当前克隆体设置一个属性:“血量”为100。这个属性就类似角色的私有变量,携带在了克隆体身上。
而其他克隆体,就可以通过这个克隆体的 id,读取到它的“血量”:
这样,就可以轻松读取、修改某个特定 id 的克隆体的数据。
2、设置克隆体的初始信息
原版的做法:
在原版 Scratch 中,可以通过私有变量,来向克隆体传递初始信息:
这个方法适用于同角色中克隆的情况。可如果要跨角色克隆呢?例如,敌人想要克隆“子弹”角色,如何向子弹克隆体传递子弹的初始位置、方向、发射者ID 等信息?
在中级篇中,我们使用了一个比较麻烦的方法,通过列表传递初始信息:
- 敌人要发射子弹时,向列表中添加生成子弹的请求,并设置子弹初始信息;
- 子弹读取列表中的请求,然后再通过私有变量来传递子弹信息:
- 可以设置刚克隆的克隆体的初始信息;
- 可以读取、修改自己,以及其他克隆体的信息。
多莉的做法:
多莉扩展可以让设置克隆体初始信息变得简单一点。
使用多莉扩展,可以在克隆的时候,附带一个数据:
这时候你可能会说,只能附带一个数据?要传递多个数据怎么办?
这时候,可以使用下面的积木,获取特定克隆体的 id:例如,附带一个初始数据“标识”,设为 1,然后就可以获取“标识”为 1 的克隆体的 id。
(注:如果有多个克隆体满足条件,上面积木会返回多个id【用逗号隔开】)
这样,我们就可以得到“刚克隆的克隆体 id”,并设置它的初始数据:
答:在中级篇介绍过,“作为克隆体启动”总是在本帧的末尾才执行(有点类似广播)。因此“作为克隆体启动”总是在设置初始信息之后执行。
注意克隆后,要重新将“标识”清除,避免后面克隆时,之前的克隆体也满足“标识为 1”,导致读取“刚克隆体的id”出错。
小练习:制作基于多莉的克隆体交互引擎
了解了以上内容,我们就可以尝试基于多莉,制作一个简单易用的克隆体交互引擎(使用全局积木)。包含下面的全局积木:
参考答案:
(注:其中“默认值”是 Arkos 扩展的积木:当前面的值为空时,返回默认值。)
上一课:01 返回值、全局积木
下一节:03 临时容器
<iframe
width="100%"
height="800px"
scrolling="no"
src="https://www.ccw.site/embed?id=STG303/Arkos/Lec1/03&type=comment"
title="{射击课高级篇-第一课-03}"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
scrolling="0"
></iframe>