
6 分配属性
6.1 属性变量
接下来我们要新建(力量)、(智力)、(体力)、(幸运)和(可分配点数)这五个变量,并在变量(姓名)赋值完成后广播“分配属性”。之后调整各变量在舞台中显示的位置,完成初始数值设置并将变量隐藏,当接收到广播“分配属性”时再显示在舞台中。变量的初始设置放在任意角色中都可以,我们建议放在与变量相关的角色或背景中,如果变量较多还可以新建一个专职角色,本项目就新建了一个属性设置角色,所有与属性设置相关的功能都集中在此角色内,如下图所示。


变量相关知识拓展
在前面我们创建了变量(姓名)用于保存一段字符串,在大多数编程语言中字符串是由数字、字母、下划线组成的一串字符,而在Scratch中字符串还可以由中文和更多符号组成。现在我们又建立了变量(力量)、(智力)、(体力)等用于保存整型数据。在编程语言中除了字符串和整数外,还有浮点数、字符、布尔值等数据类型,每一种数据类型都会占用大小不同的存储空间。那么Scratch是如何区分变量内记录的是哪一种数据呢?
其实在Scratch中所有的变量都被记录成了字符串,在与不同的代码模块组合时会转化为相应的数据类型,例如当变量与加法结合使用时,变量就会转换成整数或浮点数的数据类型。那如果我们将变量赋值为一段文字,然后对其进行加法运算结果会如何呢?
其实对于变量的引用方式,更多是靠我们自觉遵守创建该变量的意义,例如当我们创建变量(姓名)时,就已经将它定义为存储数据类型为字符串的变量了,那么就不会对其进行加法的运算。
6.2 克隆功能
我们一共有力量、智力、体力和幸运四个属性变量可以进行分配,分配时又分为增大属性变量和减小属性变量两种操作,通过前面内容掌握的知识,我们需要新建八个按钮角色才能够实现全部功能。现在我们尝试使用一种新的功能——克隆(复制),只需要通过一个属性设置角色就可以实现八个按钮的功能。通过克隆功能我们可以将功能类似的角色进行合并,以减少使用的代码模块数量,并增强程序的可读性。
与克隆功能相关的代码模块都在控制类别中,共有【当作为克隆体启动时】、【克隆(自己)】和【删除此克隆体】三种。其中【克隆(自己)】可以通过下拉菜单来选择触发其他角色进行克隆,其可以在触发克隆条件的角色与需要克隆的角色不是同一个角色时使用。但我们更多是通过使用广播功能在需要克隆的角色内使用【克隆(自己)】,这涉及变量中仅适用于当前角色的选项,在之后内容中使用到的时候会详细说明。
生成克隆体后通过【当作为克隆体启动时】对克隆体赋予功能,这些功能并不会同时赋予本体。所以我们在使用克隆功能时,本体一般在完成初始设置后会执行隐藏操作,具体的功能都通过克隆体来实现。
如果我们需要不断生成克隆体,那么为了避免占用过多的计算机资源,当某一克隆体完成其功能后,可以通过【删除此克隆体】来释放资源。
我们以力量属性的增大和减小为例,绘制“力量+”与“力量-”两个造型,如右图所示。

下面我们对属性设置角色进行初始设置,并将本体隐藏。当接收到广播“分配属性”时,切换造型并移动到对应位置进行克隆。克隆体显示在舞台中,并当鼠标指针碰到克隆体时通过亮度特效来实现提示效果。
具体设置如下图所示。

当前角色此时有两个克隆体显示在舞台中,我们用鼠标单击不同克隆体将会触发不同功能,“力量+”对应增大力量属性,“力量-”对应减小力量属性。我们通过运算类别中的相等判断<()=()>,并配合外观类别中的(造型[编号])来实现对鼠标指针单击的克隆体进行区分,根据被单击克隆体的造型编号执行其对应功能。
具体设置如下图所示。

下面我们将剩余六个造型绘制完成,并参照上述方式补全程序,舞台显示效果如下图所示。

6.3 二次判定
接下来运行程序进行测试,我们会发现每次单击属性设置角色的克隆体时,对应变量的变化与我们期望的效果并不相同,每一次鼠标单击都会使对应变量执行多次变化,而这种情况是由于计算机的运算速度过快导致的。
为了消除这种情况通常使用的方法有两种:时间延迟和条件判断。时间延迟就是在两次判断之间加入一段固定的等待时间不进行判断,而条件判断就是在满足一定新条件后才可以再次执行原条件的选择结构。
选择时间延迟的方法我们可以直接使用【等待()秒】来实现,而选择条件判断的方法我们则要使用控制类别中的【等待<>】来搭配合适的新条件,这里我们选择使用的新条件是<<按下鼠标?>不成立>,如下图所示。运算类别中的<<>不成立>是一种逻辑运算,它与数学运算不同,逻辑运算的结果只有“真”和“假”,等于、大于和小于也都属于逻辑运算,更多的逻辑运算我们在后续的内容中会逐个讲解。

时间延迟和条件判断的选择
对于不同的玩家需要的延迟时间会有差别,例如对于成年人来说,0.2秒的延迟比较合适,但对于儿童来说,0.2秒就偏短了,所以我们尽量使用逻辑更严谨的条件判断方式来解决此类问题。