【少儿编程】Scratch编程疑难杂症之克隆体失效问题

网友投稿 2019-11-29 11:20

01

问题说明

在Scratch编程入门中,如果喜欢玩《消灭方块》这个游戏的肯定会发现,当弹球碰到方块时,方块竟然没有消失,而弹球能反弹!

至于问题复现,因为没有录屏,所以没有相应的视频,但可以通过案例项目文件本地复测。

案例可以通过关注本公众号(麒麟安全实验室)回复:

消灭方块bug版本

即可获取

https://cdn.china-scratch.com/timg/191201/11200IW7-0.jpg

02

问题分析与处理

2.1、问题分析

整体的方块逻辑这里就不细讲,我们主要来分析碰到方块的过程代码:

        弹球代码:

https://cdn.china-scratch.com/timg/191201/11200K4W-1.jpg

        当弹球开始运动后,通过重复执行,不断判断是否碰到方块,碰到方块后,改变运动方向(反弹)。

        方块代码:

https://cdn.china-scratch.com/timg/191201/11200V936-2.jpg

一行方块是通过克隆完成,克隆体启动后,通过重复执行直到”碰到”弹球,才删除克隆体(方块消失)。

虽然整体逻辑似乎没有问题,两个都是启动后,通过重复执行判断对应条件是否满足。

正因为这两个重复执行判断问题,在计算机中,Scratch程序中执行命令其实还是存在先后顺序的,也就是同步执行,按照一定的流程来执行,虽然两个重复执行的条件判断,计算机CPU在运行时,还是分别按先来后到判断,只不过很多时候,前后运行的时间间隔很短,可以忽略不记,不过在重复循环判断重,因为大量的判断,也会引起时间上存在较大间隔(秒级)。

本案例中,肯定存在以下步骤:

1.  执行弹球判断是否碰到方块后,

2.  再有方块判断是否碰到弹球的的情况

第一步中,判断之后,弹球就会改变方向(反弹)并且移动5步(此时肯定没有碰到方块了),再第二步运行方块判断是否碰到弹球时,肯定就条件不成立了!因此也就无法删除克隆体(方块就不会消失了),就出现了克隆体失效的问题。

2.2、问题处理

        既然已经分析出问题了,也就是因同步存在问题,因此我们可以控制弹球在判断弹球碰到方块条件满足后,必须在移动之前,就应该“告诉”所有克隆方块都自己检查下,有谁碰到了弹球,碰到就应该消失,消失后,弹球再继续移动。

        因此,我们可以通过广播并等待脚本执行来控制:

        弹球:

https://cdn.china-scratch.com/timg/191201/1120103938-3.jpg

        方块:

https://cdn.china-scratch.com/timg/191201/1120106409-4.jpg

03

问题总结

从本案例中,我们可以总结出,当两个物体相互碰撞时,要控制另一个物体做出变化(消失、变大等),一定要考虑下是否存在同步问题

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com