Scratch高级编程之妙用变量管理母体与克隆体

1、 克隆简介

自从Scratch 2.0中引入克隆技术,程序中许多任务能够经过克隆技术更为高效地执行,而再也不须要建立大量的精灵。克隆体实质上就是精灵的实例,这意味着它们继承了精灵的属性,但另外一方面也是独立的对象。克隆体一般可能要执行与母体精灵稍有不一样的任务,但一个关键的问题是:克隆体和母体精灵都对几乎全部事件块(触发器)可以作出响应。这样一来,专门为母体精灵设计的触发器在发出信号时也可以由克隆体运行。编程

实际开发中,当须要许多类似的精灵完成类似的任务时,就应该主动考虑到使用克隆技术。由于克隆是由程序而不是用户实现的,因此克隆的运用可让用户不须要对许多精灵中的每一个精灵进行相同的更改。所以,克隆技术可典型地应用于开发:ide

  • 塔台防护小游戏(例如在地图上有大约200个塔台)
  • 许多街机风格的游戏
  • 子弹精灵(你想要多少就有多少,须要多少不一样的角色就有多少)
  • 复杂或半复杂粒子系统
  • 烟火、雪等特效
  • 鼠标轨迹
  • 任何须要大量重复精灵的项目

【高级应用提示】Scratch中的克隆可使用积木命令【看成为克隆体启动时】递归地克隆自身,有兴趣的朋友可做这方面更深刻的探讨。设计

2、 借助变量管理母体与克隆体

先来看如下简单的代码:
Scratch高级编程之妙用变量管理母体与克隆体调试

【结论一】若是单击包含上述脚本(第二段)的母体的克隆体,则克隆体自己就会执行第二段代码。
若是只要求母体而不是它的克隆响应上面的代码,那么咱们能够经过使用私有变量的办法来规定哪一个对象(能够是母体,也能够是子克隆)运行哪一个触发器。对象

【结论二】若是不使用私有变量,则全部克隆体都将共享使用同一变量。blog

3、使用私有变量

私有变量能够用于存储单个母体精灵和各个克隆体的值,尽管它们具备相同的名称。例如,三个克隆体能够有一个名为“X方向速度”的变量,可是每一个克隆均可以有本身的变量值。
相似地,母体精灵能够将其私有变量设置为特定字符串,而每一个克隆体均可将其设置为不一样的值。类之间不一样变量值的概念容许选择母体精灵或子克隆体运行哪些代码。继承


【提示】熟悉面向对象编程的朋友应该对“继承”概念不陌生吧,父类能够派生出多种子类,而子类能够拥有与父类类似但又不一样的各自特征。至此,你们应该对Scratch面向对象编程技术有更为深入的理解了吧。递归


例如,咱们想实现单击绿色标志时,当即删除全部克隆体,但母体精灵仍存在。下面,仍是让咱们经过具体的小例子来讲明问题。游戏

例1:克隆体行为与母体精灵不一样

要实现这样的目的,首先请考虑在母体中编写下面的代码:
Scratch高级编程之妙用变量管理母体与克隆体事件

易知,保存在变量“instance”中的这一小段数据只显示该母体精灵是一个“精灵”。注意,要实现上述目的,“instance”必须是私有变量;不然将没法工做。接下来,必须指定一个脚本,为全部克隆体分配一个显示它们是“克隆体”的变量值。如下脚本能够完成此操做:
Scratch高级编程之妙用变量管理母体与克隆体

显然,只有克隆体才能执行这段代码!

上面的脚本不会更改母体精灵的变量“instance”的值。相反,每一个克隆体都有本身的变量“instance”。
完成上面的两段编程后,变量“instance”和if语句相结合,就能够正确地将触发器指定为仅为母体精灵或其克隆体运行。
再来看下面的代码:
Scratch高级编程之妙用变量管理母体与克隆体
上面的脚本只适用于克隆,这是显而易见的,由于母体精灵的变量没有设置为“clone”,母体精灵不会执行此if块中的语句。请注意:上面这种使用“变量”的方法也是Scratch项目开发中调试克隆引发问题的很是有效的方法。

例2:克隆体行为彼此不一样

下面的示例演示如何在单个母体精灵的脚本中管理多个克隆体类型。请注意,在生成每一个克隆体(或一组相似克隆体)以前,会为专用变量“type”分配一个值。若是母体精灵要忽略广播,则应在生成克隆体后但在接收到广播消息以前设置其自身的惟一值“type”。
注:代码中type是私有变量。

Scratch高级编程之妙用变量管理母体与克隆体

私有变量“type”的值由每一个克隆体从母体精灵继承,而母体精灵却会忽略接收广播的消息,由于它本身的“type”值不一样。这种技术容许许多不一样的克隆体类型以各自独特的方式工做。

小结

本文并无给出复杂的彻底例子,可是仅经过简短的小例,足以说明了仅凭借变量的全局性与局部性的巧妙运用便可实现Scratch复杂开发中母体与克隆体间差别行为的有效管理。在后面的博文中,我会进一步给出Scratch复杂开发中克隆技术的其余应用注意事项,并给出更系统完整的案例,敬请期待。


Scratch高级编程之妙用变量管理母体与克隆体

https://blog.51cto.com/cloumn/detail/88 本人拙做,欢迎共同讨论)

相关文章
相关标签/搜索