羊了个羊P6 移出功能
羊了个羊Scratch开发——第六集
本集主要完成了移出功能。
角色状态的处理和切换,和上一集的撤回功能比较相似,做好三个状态,代码可以复制过来稍作修改。

为了避免重叠的出现,把选择框往下移动一些。在造型中用选择功能框住选择框向下移动,并且用草坪位置的颜色的方块遮挡移动选择框后出现的黑色部分。最终结果选择框应该在比之前更靠下的位置。向选择框中移动的卡片的位置也需要改变。
在卡片作为克隆体启动时,将已选择卡片位置变量设为0。当接收到移出消息的时候,如果已选择卡牌位置大于0,就可能被挪动。在已选择卡片中的最后三个卡片是应该被挪动的。为了选择需要移动的卡片,新建一个全局变量移出数量,存放当前已经移出的次数,当移出操作触发时将其初始化为0。然后在所有卡片中已选择卡片位置满足条件的进行移出。这就是移出操作的基本逻辑。

基本思路对了,但是这段代码在实现上还是有一些问题:
- 移出后所有卡片都会被移走
- 移出后位置不固定
现在去解决这两个问题。
移出数量应该随着卡片的逐渐移出而更新,每次移出一张卡片之后移出数量应该增加1,来让下一张卡片可以被移出。移出道具移出的卡牌最多只能有三张,所以加一个判断要求移出数量必须小于3。因为移出数量是从0开始计算的,达到2的时候就表示已经移出三张卡片了。
为了确定具体移出卡片的编号,需要从当前已选择卡片从后往前数,进而需要存放挪动之前已选择卡片的长度。新建一个全局变量总选择数量,在移出操作开始后设定为已选择卡片的项目数,在之后的判断中使用。为什么不在判断中直接使用已选择卡片的项目数?因为随着移出操作的进行,已选择卡片的项目数会随之变化,导致结果与预期不同。
把移出后卡片的位置从随机位置改为选择框上方的位置,x轴坐标根据移出次序更新。这样移出的卡片就会在选择框上排成一排了。
在移出后的卡片默认被遮罩了。对于移出之后的卡片,将它的卡片编号设置为原本数量之后的新编号,在遮罩判断部分的代码加一个特殊判断,如果卡片编号比原本的卡片数量大,就判断其不会被遮罩。
在移出卡片后,将卡片从已选择卡片中删除,克隆并删除自己来重新执行其他脚本,移出就完成了。

总结
本集课程完成了移出道具的功能。相比于上一次的撤回道具,移出道具实现完善了很多,不过依然有一些细节需要处理。在完成移出道具时,对之前的部分代码也做了增添和改动,一些改动可能带来难以预料的影响。在代码编写之前构思好需要处理的功能和流程,有助于在编写时更加流畅,减少对旧逻辑的改动以降低出现问题的风险。

浙公网安备 33010602011771号