【青少年编程】【答疑】控制Scratch异步代码的执行顺序

问题

几天前,我写了一篇图文 对「等待(0)秒」的理解,发现可以利用「等待(0)秒」这个积木块来解决Scratch中异步代码的执行顺序问题,即点击绿旗后可以控制多个角色中响应该事件的代码的顺序。

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

经过这几天反复的尝试,发现以上的观点欠妥。控制Scratch异步代码的执行顺序其实是跟角色所在的图层有关系的,图层靠前者先启动。

舞台展示:

小猫代码:

蛋糕代码1:

第二次点击绿旗时,由于蛋糕的图层在前,先启动蛋糕的代码,而此时小猫正好在蛋糕的位置,蛋糕隐藏,后启动小猫的代码,小猫回到初始位置。此时舞台上只有小猫而没有蛋糕。十分怪异。

蛋糕代码2:

第二次点击绿旗时,由于小猫的图层在前,先启动小猫的代码,小猫回到初始位置,后启动蛋糕的代码,蛋糕显示并等待小猫来吃,跟我们预期的一致。每次点击绿旗后,所有角色都回到初始状态,重新开始。

视频演示:

解决方法

通过使用「等待(0)秒」积木块以及控制角色所在图层,都可以控制Scratch异步代码的执行顺序。但,这样的代码很不美观且晦涩难懂。大家想,存在此类问题的根本原因就是点击绿旗后,不同角色都有响应的代码。解决这样的问题,我们只需在整体的程序中只使用一个绿旗,只有一段响应的代码,利用消息来控制其他代码的执行顺序。

小猫代码:

点击绿旗之后,发送广播“小猫初始化”并等待对应事件执行完毕,再来广播“蛋糕初始化”,这样就能够保证各个角色初始化的先后顺序。

蛋糕的代码:

总结

我组建这个「青少年编程竞赛交流群」的最大益处就是能够快速获取大家的学习反馈。收集大家学习中遇到的问题,一起讨论一起解决,从而提升我们对Scratch中各个积木块的认知,如果你周围的小朋友对Scratch感兴趣,可以把他邀请进来,跟我们一起学习,一起升级打怪。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程备考

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值