01
问题说明
在Scratch编程入门中,如果喜欢玩《消灭方块》这个游戏的肯定会发现,当弹球碰到方块时,方块竟然没有消失,而弹球能反弹!
至于问题复现,因为没有录屏,所以没有相应的视频,但可以通过案例项目文件本地复测。
案例可以通过关注本公众号(麒麟安全实验室)回复:
消灭方块bug版本
即可获取
02
问题分析与处理
2.1、问题分析
整体的方块逻辑这里就不细讲,我们主要来分析碰到方块的过程代码:
????????弹球代码:
????????当弹球开始运动后,通过重复执行,不断判断是否碰到方块,碰到方块后,改变运动方向(反弹)。
? ? ? ??方块代码:
一行方块是通过克隆完成,克隆体启动后,通过重复执行直到”碰到”弹球,才删除克隆体(方块消失)。
虽然整体逻辑似乎没有问题,两个都是启动后,通过重复执行判断对应条件是否满足。
正因为这两个重复执行判断问题,在计算机中,Scratch程序中执行命令其实还是存在先后顺序的,也就是同步执行,按照一定的流程来执行,虽然两个重复执行的条件判断,计算机CPU在运行时,还是分别按先来后到判断,只不过很多时候,前后运行的时间间隔很短,可以忽略不记,不过在重复循环判断重,因为大量的判断,也会引起时间上存在较大间隔(秒级)。
本案例中,肯定存在以下步骤:
1.? 执行弹球判断是否碰到方块后,
2.? 再有方块判断是否碰到弹球的的情况
第一步中,判断之后,弹球就会改变方向(反弹)并且移动5步(此时肯定没有碰到方块了),再第二步运行方块判断是否碰到弹球时,肯定就条件不成立了!因此也就无法删除克隆体(方块就不会消失了),就出现了克隆体失效的问题。
????????弹球:
????????方块:
03
问题总结
从本案例中,我们可以总结出,当两个物体相互碰撞时,要控制另一个物体做出变化(消失、变大等),一定要考虑下是否存在同步问题
有问题课堂上即时解答,提高教学效率,与老师、同学更多互动,提高课堂灵活性,全身心、全方位地帮助学生更快成长与进步。
少儿编程培训学校学习环境好,具有未来感和想象力的学习环境,与同学们一起积极讨论,创造活跃的学习氛围。
少儿编程培训师资好,教学经验丰富的教育顾问指导课研,细致的班主任、讲师教学服务,浸入式的学习体验。