科创科普:Scratch 的「分身术」——克隆体与消息广播做出满屏小游戏

科创科普:Scratch 的「分身术」——克隆体与消息广播做出满屏小游戏

一、一个卡住很多人的问题

做 Scratch 游戏时,你一定会遇到这样的需求:天上要落下几十个苹果、屏幕上要钻出一排地鼠、发射子弹要一发接一发。可是角色只有一个,怎么让它变成很多个?

有的同学想到「复制角色」:在角色区右键复制十份,每份改一段代码。结果是——角色列表里塞满了几十个同名角色,改一个参数要改十遍,游戏还没做完就已经乱了。Scratch 早就为这种需求准备了正确的工具:克隆体(Clone)。学会它,一个角色就能变出成百上千个「分身」,而且它们共用同一段代码。

二、克隆体到底是什么

克隆,就是让一个角色「复制自己」。原来的那个叫本体,复制出来的每一个都叫克隆体。

三个关键事实:

  1. 克隆体长得和本体一模一样,外观、造型、大小都相同,但它是独立的个体,可以有自己的位置、方向、大小、显示或隐藏状态。
  2. 克隆体只复制「样子」,不复制「代码」。所有克隆体跑的是同一段脚本,但因为每个克隆体的变量(例如坐标)不同,看上去就像各干各的。
  3. 克隆体有数量上限。Scratch 同时存在的克隆体最多约 300 个,超了就再也克隆不出来。所以「用完就删」不是可选项,而是必须遵守的规则。

三、必须记住的三块积木

克隆的全部功能集中在三块积木上:

  1. 当作为克隆体启动时(控制分类,帽子积木):这是克隆体的「出生证明」。克隆体诞生后,从这里开始执行。本体不会执行它。
  2. 克隆自己(控制分类):让当前角色复制出一个克隆体。本体执行它,就多一个分身。
  3. 删除此克隆体(控制分类):让当前克隆体消失。注意它只能用在克隆体身上,本体执行会直接把自己从舞台上删掉。

三块积木的分工可以用一句话记牢:本体负责「生」,克隆体负责「活」和「死」。

四、一个最小的例子:让小猫分身三只

小猫的脚本:

当绿旗被点击 重复执行 3 次 克隆自己

当作为克隆体启动时 等待 1 秒 说 "我是分身" 删除此克隆体

运行后你会看到:舞台上的小猫每秒钟「冒出」一个说话的小猫,说完又一个个消失。你会注意到,三个克隆体是错开 1 秒依次说话的,而不是同时——因为它们都是各自独立执行这段脚本的。这一点非常重要,它意味着你可以让每个分身「按自己的节奏走」。

五、克隆和消息广播的分工

克隆体擅长「数量多、越像越好」:满天星星、成群小鱼、连续子弹。 消息广播(事件分类的「当接收到消息」)擅长「不同角色之间打配合」:小猫广播「发射」,子弹角色接收到那一条消息后去克隆自己。

两者组合是 Scratch 里最实用的套路:数量靠克隆,配合靠广播。

六、案例:接苹果小游戏

目标:苹果从天上不断落下,小猫在下面左右移动去接,接到加 1 分。

苹果角色的脚本:

当绿旗被点击 将 分数 设为 0 重复执行 等待 随机数 0.6 到 1.5 秒 移到 x:随机数 -220 到 220 y:180 克隆自己 (结束重复)

当作为克隆体启动时 显示 重复执行直到 <碰到 舞台底部> 或 <碰到 小猫> 将 y 坐标增加 -6 如果 <碰到 小猫> 那么 将 分数 增加 1 删除此克隆体

小猫角色的脚本:用左右方向键改变 x 坐标(每次 ±10),并加一句「如果 x 坐标超过 220,就设为 220」防止跑出舞台。

这段代码里有三个值得注意的设计:

  1. 落下用「将 y 坐标增加 -6」,负数表示向下。改成 -3 苹果变慢,改成 -10 变快,难度调节只需要改一个数字。
  2. 等待时间用随机数,苹果下落节奏才不规则,游戏不会显得机械。
  3. 循环结束的条件写了「碰到小猫」——接到就删除,否则苹果会一直贴着猫往下钻,导致重复加分。

七、做满屏特效:把克隆体用出「颗粒感」

克隆体最惊艳的用法是做粒子效果。比如小猫碰到尖刺时炸开一片火花:

火花角色的脚本:

当接收到消息 "爆炸" 重复执行 20 次 移到 小猫 面向 随机数 0 到 359 方向 克隆自己

当作为克隆体启动时 重复执行 15 次 移动 4 步 将大小增加 -3 将 虚像 特效增加 4 删除此克隆体

15 次 × 4 步 = 飞出去约 60 像素,同时越来越小、越来越透明,最后自动消失。20 个克隆体错开方向飞散,效果就像一小团烟花。整套代码不到十块积木,却做出了商业游戏里常见的打击反馈。

八、五个最常见的坑

坑一:忘了删除克隆体。这是 90% 的卡顿问题的根源。几百个看不见的克隆体还留在舞台上,每个都在执行循环,程序就越来越慢。记死一句话:每个克隆体都要有一条明确的「删除此克隆体」的路。

坑二:把「当作为克隆体启动时」和「当绿旗被点击」混用。绿旗点击时,只有本体执行「当绿旗被点击」下面的脚本,克隆体不执行。所以「初始化分数」这类事要放在本体里做,别指望克隆体去做,否则分数会被清零很多次。

坑三:变量显示得满屏幕。如果勾选了变量的显示框,每个克隆体都可能让计分板抖动或重叠。做法是:给计分板用一个「仅适用于当前角色」的变量,或者干脆用大字角色来显示分数。

坑四:用「当角色被点击」处理克隆体。这一块积木对克隆体不生效。想实现「打地鼠」里点击某个分身,正确做法是给克隆体用「如果 碰到 鼠标指针 且 按下鼠标 那么」,或者在克隆体脚本里判断「碰到鼠标并且被按下」。

坑五:克隆体位置没重置。克隆体会保留本体的当前状态。所以「当作为克隆体启动时」的第一句,通常要显式设定位置、大小和显示状态,否则分身的起点会随本体乱跑。

九、小练习

练习 1:做一个「满天星星闪烁」的背景效果:星星角色克隆 50 个,散布在整个舞台,每个分身随机等待 0.5 到 2 秒后消失。

练习 2:把接苹果游戏的难度改造成「每得 5 分,苹果下落速度增加 1」。提示:下落速度用变量「速度」控制,初始 -6,接到苹果后判断分数除以 5 的余数。

练习 3:思考题:导弹发射游戏里,如果导弹克隆体永远不会删除,屏幕上会出现什么现象?为什么?

十、小结

克隆体是 Scratch 从「小动画」走向「真游戏」的分水岭。记住三块积木、一条铁律(用完就删)、一个组合(克隆管数量、广播管配合),你就能做出满天星星、连发子弹、爆炸特效这些看起来很专业的画面。下一次当你准备右键复制角色的时候,请停下手指,改用「克隆自己」。