【少儿编程】Scratch编程疑难杂症之克隆体失效问题
01
问题说明
在Scratch编程入门中,如果喜欢玩《消灭方块》这个游戏的肯定会发现,当弹球碰到方块时,方块竟然没有消失,而弹球能反弹!
至于问题复现,因为没有录屏,所以没有相应的视频,但可以通过案例项目文件本地复测。
案例可以通过关注本公众号(麒麟安全实验室)回复:
消灭方块bug版本
即可获取
02
问题分析与处理
2.1、问题分析
整体的方块逻辑这里就不细讲,我们主要来分析碰到方块的过程代码:
弹球代码:
当弹球开始运动后,通过重复执行,不断判断是否碰到方块,碰到方块后,改变运动方向(反弹)。
方块代码:
一行方块是通过克隆完成,克隆体启动后,通过重复执行直到”碰到”弹球,才删除克隆体(方块消失)。
虽然整体逻辑似乎没有问题,两个都是启动后,通过重复执行判断对应条件是否满足。
正因为这两个重复执行判断问题,在计算机中,Scratch程序中执行命令其实还是存在先后顺序的,也就是同步执行,按照一定的流程来执行,虽然两个重复执行的条件判断,计算机CPU在运行时,还是分别按先来后到判断,只不过很多时候,前后运行的时间间隔很短,可以忽略不记,不过在重复循环判断重,因为大量的判断,也会引起时间上存在较大间隔(秒级)。
本案例中,肯定存在以下步骤:
1. 执行弹球判断是否碰到方块后,
2. 再有方块判断是否碰到弹球的的情况
第一步中,判断之后,弹球就会改变方向(反弹)并且移动5步(此时肯定没有碰到方块了),再第二步运行方块判断是否碰到弹球时,肯定就条件不成立了!因此也就无法删除克隆体(方块就不会消失了),就出现了克隆体失效的问题。
2.2、问题处理
既然已经分析出问题了,也就是因同步存在问题,因此我们可以控制弹球在判断弹球碰到方块条件满足后,必须在移动之前,就应该“告诉”所有克隆方块都自己检查下,有谁碰到了弹球,碰到就应该消失,消失后,弹球再继续移动。
因此,我们可以通过广播并等待脚本执行来控制:
弹球:
方块:
03
问题总结
从本案例中,我们可以总结出,当两个物体相互碰撞时,要控制另一个物体做出变化(消失、变大等),一定要考虑下是否存在同步问题
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com