在西游记中,有一集是“真假悟空”,六耳猕猴变成了悟空的模样与真悟空真假难辨,打的不可开交。

在Scartch中,我们常常会使用一个本体来生成多个克隆体,这在开发过程中有重要的意义。但在实际操作中,每个克隆体看起来都是一样的,如何在程序中区分克隆体呢?

我们这里需要区分两个问题:

第一个是如何区分本体和克隆体.第二个是如何标识及区分多个不同的克隆体。

今天,我们就把克隆体的相关知识及区分的问题分析一下。

克隆体与本体的关系是什么呢? 

在本体生成克隆体时,克隆体会具有和本体相同的位置、方向、大小、特效、造型、声音、局部变量和程序。由于它们具有相同的程序,所以在响应消息时,本体和克隆体可能会同时接受消息,产生错误的结果。因此必须区分本体及克隆体。

下面,我们从克隆体的生命周期上分析区分的方法,克隆体的生命周期包括如下几个过程。

1

克隆体的创建:是使用“克隆”积木生成的,可以生成一个角色的克隆体,或生成另外角色的克隆体。

2

在克隆体生成时,就会激发“当作为克隆体启动时”的事件,可以在此进行一些克隆体的初始化工作。

3

删除克隆体,克隆体最后可以删除自己。只有删除后,克隆体的所有资源才释放。

而本体的生命周期呢?

本体是一直存在的,只要在项目中加入了这个本体角色,这个角色就存在,直到将这个角色从项目中删除才会释放所有的资源。

很重要的一个区别就是,只有本体可以接收绿旗事件。由于在点击绿旗时,系统会先删除所有的克隆体,这时舞台上只有本体,也就只有本体可接受绿旗事件。

从上面的分析可以知道,本体和克隆体发生的事件是不同的。

只有本体可以接收绿旗事件,只有克隆体可以接收“当作为克隆体启动时”事件。

这样就可以区分这两者了。

典型的方式如下,可以设置一个局部变量“是克隆体”,在绿旗时设置为0,表示不是克隆体,在“当作为克隆体启动时”时,再把这个变量设置为1,表示是克隆体。

程序如下:

这样这个变量的值就表示了是否是克隆体。

下面是区分克隆体的问题,在生成多个克隆体时,如何区分不同的克隆体呢?

可以使用这样的方式,建立一个局部变量ID,使每个克隆体的数值不同,就可以用来区分多个克隆体了。那么如何设置这个值呢?可以在本体中改变值后再克隆,因为克隆体继承了本体变量的值,所以每个可以有不同的值。

程序如下:

可以看到,在生成10个克隆体的过程中,每个克隆体都有了不同的ID。在点击绿旗及按下空格后,就得到了下面的效果。

可以看到每个克隆体得到了从1到10的不同ID,而说11的就是本体。

结论

1   克隆体是Scratch中重要的功能,在程序中区分克隆体是很重要的技术。

2   区分包括两个方面,一个是区分本体和克隆体,另一个是区分不同的克隆体。

3   区分本体和克隆体的方式是利于两者的不同事件。

4   区分不同克隆体的方式是使用一个标识的变量。

最新文章

  1. Ubuntu15.04YouCompleteMe插件安装
  2. Filter(过滤器)学习
  3. 夺命雷公狗-----React_native---4---初始化项目
  4. XML文件中CDATA的作用
  5. POJ3415 Common Substrings(后缀数组 单调栈)
  6. SQLyog 配置SQL Assitant
  7. ie6 ie7 绝对定位 相对定位 层被遮住
  8. 关于C/C++中的位运算技巧
  9. 如何实现数字lcd显示效果(原创)
  10. List<int>是值类型还是引用类型
  11. The usage of V$PGA_TARGET_ADVICE
  12. LINQ笔记
  13. 使用EPPlus读写xlsx文件
  14. Android初学:Gradle 'HelloWorld' project refresh failed
  15. POJ 3294 n个串中至少一半的串共享的最长公共子串
  16. 《Java技术》第三次作业--面向对象——继承、抽象类、接口
  17. Snapman系统中TCC执行效率和C#执行效率对比
  18. 迁移svn项目到git
  19. python抓取电影<海王>影评词云生成
  20. 【Python】hasattr() getattr() setattr() 使用方法详解

热门文章

  1. redisson spring boot starter 做分布式锁
  2. 【spark 算子案例】
  3. [Andorid] 通过JNI实现kernel与app进行spi通讯
  4. 【Oracle/Java】以Insert ALL方式向表中插入百万条记录,耗时9分17秒
  5. centos上安装Python并修复yum
  6. Android插件化(二):OpenAtlas插件安装过程分析
  7. MySQL中表的复制以及大型数据表的备份教程
  8. unique_ptr智能指针
  9. Qps 和 tps的解释
  10. (十六)Centos之安装mysql