Navigation

    CreatiCode Scratch Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode

    克隆角色

    二维积木
    1
    1
    325
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      creaticodeteacher2-mail last edited by admin

      介绍

      在有些项目中,我们需要用到很多个表现相同的对象。例如,我们想让10只小狗在舞台上随意走动。比较幼稚的方法就是创建10个小狗角色并分别添加代码积木。问题是,大部分代码是相近的,所以我们要重复添加相同的积木10次。

      更好的方法就是用“克隆”。当我们克隆某个角色,就是新建这个角色的副本,包括其代码积木、造型和声音。不过,一个主要区别就是,只有当程序开始运行后我们才新建角色副本。所以,在程序开始后,我们对角色的代码和造型所做的全部更改都会完好无损地复制过去。当程序结束时,所有克隆体都被自动删除。

      与克隆相关的所有积木都在“控制”类别:

       

      如何克隆?

      可使用该积木进行克隆:

      • 角色列表:第一个参数指定克隆哪个角色。“自己”就是该积木所在的本角色。如果项目中还有其他角色,例如“篮球”、“棒球”,其名称也会显示在该列表中。

      • 克隆体ID编号:第二个参数可以给克隆体赋值一个数字或文本。如果空着,就会给新的克隆体赋值一个随机的唯一ID。

      例如,这个程序会创建3个克隆体,ID编号分别为“1”、“2”、“3”。

      注意:你看不出来有3个克隆体,因为克隆体都和原角色重叠在一起,位置、大小和造型都完全一样。

       

      创建克隆体后运行的代码

      生成克隆体后,为了让克隆体做一些行为,你可以在这个积木下面添加新的代码积木:

      例如,这段代码让每个克隆体移动到随机位置,这样我们就能清楚看到全部克隆体。注意,原角色不受克隆体行为的影响。

       

      克隆体ID编号

      当创建好所有克隆体之后重新调用这个积木,每个克隆体被赋值一个唯一ID。利用这个积木,每个克隆体都能找出自己的ID。

      例如,我们可以让克隆体报告自己的“克隆ID”:

       

      让克隆体删除自身

      利用这个积木,克隆体做完行为后就可以删除自身:

      注意:不能在这个积木下面连接其它积木,因为克隆体已经被删除。

      在如下示例中,我们让每个克隆体说出自己的“克隆ID”,时长2秒,然后删除自身。

       

      获取克隆体的信息

      舞台下方的角色面板只显示原角色的信息。无论如何,原角色仍然能利用这个积木根据克隆体的ID获取其信息:

      • 属性名称:第一个下拉菜单包含了所能读取的克隆体的属性列表,比如位置、方向和造型。

      • 角色名:第二个下拉菜单指定你想查询哪个角色或者克隆体。
        例如,生成3个克隆体后,你可以通过原角色获取克隆体的“x位置”。

       

      利用消息与克隆体通信

      尽管你可以在积木“当作为克隆体启动时”下面添加克隆体的代码积木,但这些积木只能运行一次。与克隆体“通话”的另一种方式就是广播消息。其好处就是,你什么时候都可以发送消息。

      例如,在这个程序中,生成所有克隆体后,我们在原角色广播“消息1”。还有一个积木用来接收这个消息。因为所有克隆体的代码与原角色相同,所以都会运行这一叠积木“当收到消息( )”。

      注意:原角色尽管不是克隆体,但也会响应“消息1”,并且也有一个随机“克隆ID”。一个普遍的做法就是,只让克隆体运行,隐藏原角色。比如,我们可以检查一下“克隆ID”是否属于我们赋予克隆体的ID范围。如果不是,那我们就在原角色的代码中,所以什么都不做并隐藏角色。

      1 Reply Last reply Reply Quote 0
      • First post
        Last post