Scratch

状课网-少儿编程网课专业平台

Scratch Scratch编程之克隆体编程实践与研究

发布时间:2021-12-09 17:02:36 浏览 0

  克隆体是少儿图像化编程中一块重要内容。运行克隆指令能产生一个与原角色相同的新角色,原角色称为本体,新产生角色称为克隆体。介绍克隆体编程的图书和文章虽然很多,但是,大多数介绍不全面、不透彻,甚至也有很多谬误掺杂其中。因此,总结克隆体编程的实践,将其中规律性的内容进行归纳和提炼就显得很有必要了。

一、克隆体编程的一般规律

  克隆体可以继承本体除脚本外的几乎所有属性,如当前位置、方向、造型、特效等。甚至本体的私有变量克隆体也会继承下来,私有变量的值与产生克隆体时本体的值相同。“继承”是面向对象编程技术中的一个重要概念。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。因此,实际上本体是父类实例,克隆体是子类实例。克隆体编程的一般步骤是如图1所示[1]。首先是执行[克隆自己]指令,然后[当作为克隆体启动时]事件就会自然发生。在[当作为克隆体启动时]事件下可以编写执行各种行为的脚本,例如移动X步,右转X度等。克隆体的行为执行完后,运行[删除此克隆体]指令,它就可以退场了。除了[删除此克隆体]指令可以让克隆体退场,点击程序的停止按钮也会使克隆体瞬间消失。换句话说,克隆体只能在程序运行期间存在,程序停止运行后克隆体会被自动删除。值得一提的是,克隆体的数量不是无上限的,最多产生301个。这样的安排也是为了避免小朋友利用克隆体编程时,不断产生克隆体造成计算机资源被耗尽,最终死机。有了这个限制,就可以尽情尝试编程的乐趣而没有当机的后顾之忧了。

Scratch编程之克隆体编程实践与研究

图1 克隆体编程基本步骤

二、脚本对克隆体和本体的可见性

  图2中含有[克隆自己]指令的脚本运行后,角色首先将自己显示出来,然后将大小设置为20-60之间,再移动到随机位置,旋转随机角度。此时,执行[克隆自己]指令就会生成一个与本体大小、位置和旋转角度完全相同的克隆体,此时克隆体与本体是重叠在一起的。[克隆自己]脚本后面[隐藏]指令只会对本体起作用,并不会使克隆体隐藏。换句话说,在[克隆自己]指令所在的同一个程序块中,[克隆自己]后面的指令只会对本体起作用,并不对克隆体起作用。那么,如果我们想指挥克隆体是不是只能通过在[当作为克隆体启动时]这个事件下编写脚本才能实现呢?要想知道正确的答案可以通过运行图3脚本进行验证。

Scratch编程之克隆体编程实践与研究

图2 克隆体继承本体属性

  图3中脚本运行后,按下空格键前只有本体在舞台上不断地从一个位置随机运动到另外一个位置,而克隆体并不运动,效果如图4所示。按下空格键后,克隆体才与本体一样,开始在舞台上从一个位置向另一个随机位置做滑行运动,效果如图5所示。根据图3中脚本,克隆体产生前,本体通过[说XXX]指令显示了“我是克隆体”这句话。但是,程序实际运行时,生成的克隆体并没有说“我是克隆体”这句话。这是因为克隆体无法继承本体的内部指令。克隆体产生后,虽然后面脚本还有重复执行[在1秒内滑行到随机位置]指令,但是该指令显然只对本体有效,而对克隆体并不起作用。根据程序实际运行效果,克隆体也会响应[当按下空格键]事件下的脚本。综合前面的分析,我们可以得出结论:克隆体不继承本体的脚本,产生克隆体程序块后面的脚本对克隆体是不可见的,但是其他程序块的指令对克隆体和本体都是可见的。因此,克隆体产生后,如果通过其他程序块的脚本再执行克隆自己指令,克隆体也可以再克隆自己,这种情况下克隆体的产生数量将按指数规律增加。

Scratch编程之克隆体编程实践与研究

图3 克隆体与本体对脚本的响应规律

Scratch编程之克隆体编程实践与研究

图4 按下空格键前脚本运行效果

Scratch编程之克隆体编程实践与研究

图5 按下空格键后脚本运行效果

三、克隆体编程创新方向

  scratch编程爱好者一般都很青睐克隆指令,因为利用它能做出很多颇有创意的效果。其实,总结起来,克隆体编程的创新方向主要包括三个方面。

(1)通过改变克隆指令前本体的造型、位置、特效等属性

  这个方法是初学者最喜欢尝试的。老师讲授克隆体编程后,学生通常会将本体换成水果、气球、恐龙等其他的角色,然后在这些新的角色上执行克隆自己指令,或者通过增加本体的类型和克隆体的数量,达到一种特别震撼的效果。这些尝试难度不高,对激发学生的兴趣和学习积极性是特别有好处的。

(2)通过[当作为克隆体启动时]事件下的脚本设定克隆体启动后的运动效果

  在[当作为克隆体启动时]事件下编写脚本设定克隆体启动后的运动效果,如果再配合本体的运动,能够创造出很多有意思的程序效果。图4程序脚本就是这个创新方向的典型案例。程序脚本运行后,本体从舞台中心不断产生克隆体,而克隆体会按照启动时的方向持续移动一段距离,移动的同时增加自身的大小,然后删除。当同时存在的克隆体较多时就形成了一种从舞台中心沿径向旋转运动的效果,如图7所示。

Scratch编程之克隆体编程实践与研究

图6 克隆体编程创新方向二案例程序脚本

Scratch编程之克隆体编程实践与研究

图7 克隆体编程创新方向二案例运行效果

(3)通过设置克隆体与本体、鼠标、键盘或其他角色之间互动

  克隆体产生后,可以编写脚本使克隆体能够响应本体、鼠标、键盘和其他角色等的交互,这样就能够使克隆体更加智能化,使程序更加有趣。有人利用这种原理制作了成排的外星人克隆体,并且这些克隆体能向飞船角色不断靠近,与飞船发射的子弹克隆体进行交互[2]。贪吃蛇游戏中,利用克隆体与本体的互动,实现了蛇头碰到蛇身体就停止游戏的效果[2]。笔者利用克隆体与鼠标之间的交互,实现了排斥力场的效果,脚本如图8所示。图8 脚本运行后,在舞台区首先产生200个克隆体。然后,鼠标在舞台上移动式,克隆体距离鼠标距离小于50就会产生排斥力作用,使克隆体向鼠标相反方向移动,效果如图9所示。图10抗击新冠游戏是也是使用了病毒克隆体和药水克隆体之间的交互。

Scratch编程之克隆体编程实践与研究

图8 排斥力场程序脚本

Scratch编程之克隆体编程实践与研究

图9 克隆体响应鼠标动作案例运行效果

Scratch编程之克隆体编程实践与研究

图10 抗击新冠游戏效果

四、克隆体精准控制

  很多时候,我们需要控制克隆体按一定的数学或者物理规律运动。要对克隆体进行如此精准地控制,就必须对克隆体进行编号。对克隆体进行编号的原理就是利用了克隆体能够继承本体私有变量的特点。在克隆体编程中,如果需要对克隆体精准控制,需要事先设置两个变量,其中一个为适用于所有角色(公共变量),另外一个是仅适用于当前角色(私有变量);私有变量作为克隆体的编号,公共变量用于给编号赋值。给克隆体编号的方法有两种:第一种方法是[克隆自己]指令执行之前,将本体编号设置为克隆体编号预期值,然后克隆体的编号也会和本体数值一样,如图11脚本所示;第二种方法是本体的编号不变,当每一个克隆体启动时将公共变量设置为克隆体编号的预期值,然后将编号设置为公共变量值,如图11脚本所示。图11和图12两种方法运行后得到的程序效果是一样的,如图13所示。但是两种方法完成克隆体编程后,本体的编号是不同的。如果编程中需要使用本体的编号,则应该认识到上述两种方法完成克隆体编号后本体最终编号的不同。

Scratch编程之克隆体编程实践与研究

图11 第一种克隆体编号方法

Scratch编程之克隆体编程实践与研究

图12 第二种克隆体编号方法

Scratch编程之克隆体编程实践与研究

图13 克隆体编号脚本运行效果

  给克隆体进行编号后,就可以根据编号精准控制克隆体了。本体生成不同若干大小不一的克隆体,根据克隆体编号调用他们,可以使他们按照大小进行排序[3](效果如图14所示),演示各种排序算法[4](效果如图15所示),动态组合出数学函数曲线[5](效果如图16所示),还可以使克隆体按照正态分布运动,并模拟病毒传播的过程[6] (效果如图17所示)。

Scratch编程之克隆体编程实践与研究

图14 按小螃蟹大小排序程序运行效果

Scratch编程之克隆体编程实践与研究

图15 冒泡法排序运行效果

Scratch编程之克隆体编程实践与研究

图16 克隆体演示动态函数曲线效果

Scratch编程之克隆体编程实践与研究

图17 利用克隆体模拟疫情传播运行效果

五、结论

  (1)克隆体继承本体的位置、方向、造型、特效,甚至私有变量等,但是不继承本体的脚本。可以通过在[当作为克隆体启动时]事件下编写脚本使克隆体执行各种行为。克隆体数量的上限是301个。

  (2)克隆体不继承本体的脚本,产生克隆体程序块后面的脚本对克隆体是不可见的,但是其他程序块的指令对克隆体和本体都是可见的。

  (3)克隆体编程可以通过改变执行克隆指令前本体的造型、位置、特效等属性;在[当作为克隆体启动时]事件下脚本设定克隆体启动后的运动效果;使克隆体与本体、鼠标、键盘或其他角色互动三个方面进行创新。

  (4)为了精准控制克隆体,必须对克隆体编号。克隆体编号可以在克隆指令前通过改变本体的编号实现,也可以在克隆体启动时给克隆体编号。两种方法的区别在于克隆体编号完成后本体的编号不同。

  文章来源:汤老师教你学Scratch编程

本文链接:https://www.ascratch.com/news/17888.html

上一篇:Scratch编程之抗击新冠游戏 下一篇:返回列表