分享

【青少年编程】【答疑】对「等待(0)秒」的理解

 老马的程序人生 2021-02-26

Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】,即可进入。如果加入了之前的社群不需要重复加入。

微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。

问题

今天,我们在「青少年编程竞赛交流群」内一起讨论了一个遇到的问题。我把代码和视频放到下面,大家感觉一下。

舞台展示:

舞台中有两只一摸一样的小猫,一只在左边,一只在右边。

左边小猫的代码:

右边小猫的代码:

这两个代码,都是让小猫旋转2周。右边小猫的代码在循环中增加了一个积木块「等待(0)秒」,起初我认为这个积木块是多余的,直到运行之后才对这个积木块有了新的认知。

大家可以看下面的运行视频。

从运行结果可以发现,「等待(0)秒」会产生一个短暂的线程堵塞(看上去的0秒,其实并不是我们想象中的0秒)。从而导致左边的小猫比右边的小猫更快的完成了旋转2周的操作。

验证

我们有了以上的猜测,就可以用「等待(0)秒」这个积木块来解决点击绿旗后多个角色代码执行顺序控制的问题。

点击绿旗,程序开始。如果多个角色都有对应的代码,则同时开启多个线程并行执行。这里需要注意,看起来是同时一起执行,其实这些线程启动的先后顺序跟当时CPU的状态是有关系的,并不是严格意义上的同时。

我们先看下面小猫吃蛋糕的例子。

舞台展示:

小猫的代码:

点击绿旗之后,小猫移动到初始位置(X=-94,Y=-32)。按上下左右键,小猫做出相应的往上下左右走10步的动作。

蛋糕的代码:

点击绿旗之后,显示蛋糕,一直检测是否碰到小猫,如果碰到小猫就隐藏起来,并停止这个脚本。

看出来这块代码的问题了吗?我们先通过视频演示一下。

从视频中我们可以看到,小猫第一次吃掉蛋糕后,第二次运行的时候,蛋糕并没有显示。

怎么回事呢?比较靠谱的理由就是蛋糕的点击绿旗之后运行的代码先启动了,由于小猫在蛋糕的位置,所以条件语句为真,蛋糕被隐藏了。小猫代码后启动,小猫移动到初始位置,蛋糕却没有显示。

怎样解决这个问题呢,我们就可以使用「等待(0)秒」这个积木块来控制代码的执行顺序。

修改后蛋糕的代码:

增加一个「等待(0)秒」的积木块对当前的线程做一个短暂的堵塞,就不会出现上面的问题了。

我们再看一下运行的结果

总结

我组建这个「青少年编程竞赛交流群」的最大益处就是能够快速获取大家的学习反馈。收集大家学习中遇到的问题,一起讨论一起解决,从而提升我们对Scratch中各个积木块的认知。


    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多