【青少年编程】【答疑】控制Scratch异步代码的执行顺序
问题
几天前,我写了一篇图文 对「等待(0)秒」的理解,发现可以利用「等待(0)秒」这个积木块来解决Scratch中异步代码的执行顺序问题,即点击绿旗后可以控制多个角色中响应该事件的代码的顺序。
在这篇图文中,我认为:点击绿旗,程序开始。如果多个角色都有对应的代码,则同时开启多个线程并行执行。这里需要注意,看起来是同时一起执行,其实这些线程启动的先后顺序跟当时CPU的状态是有关系的,并不是严格意义上的同时。
经过这几天反复的尝试,发现以上的观点欠妥。控制Scratch异步代码的执行顺序其实是跟角色所在的图层有关系的,图层靠前者先启动。
舞台展示:
小猫代码:
蛋糕代码1:
第二次点击绿旗时,由于蛋糕的图层在前,先启动蛋糕的代码,而此时小猫正好在蛋糕的位置,蛋糕隐藏,后启动小猫的代码,小猫回到初始位置。此时舞台上只有小猫而没有蛋糕。十分怪异。
蛋糕代码2:
第二次点击绿旗时,由于小猫的图层在前,先启动小猫的代码,小猫回到初始位置,后启动蛋糕的代码,蛋糕显示并等待小猫来吃,跟我们预期的一致。每次点击绿旗后,所有角色都回到初始状态,重新开始。
解决方法
通过使用「等待(0)秒」积木块以及控制角色所在图层,都可以控制Scratch异步代码的执行顺序。但,这样的代码很不美观且晦涩难懂。大家想,存在此类问题的根本原因就是点击绿旗后,不同角色都有响应的代码。解决这样的问题,我们只需在整体的程序中只使用一个绿旗,只有一段响应的代码,利用消息来控制其他代码的执行顺序。
小猫代码:
点击绿旗之后,发送广播“小猫初始化”并等待对应事件执行完毕,再来广播“蛋糕初始化”,这样就能够保证各个角色初始化的先后顺序。
蛋糕的代码:
总结
我组建这个「青少年编程竞赛交流群」的最大益处就是能够快速获取大家的学习反馈。收集大家学习中遇到的问题,一起讨论一起解决,从而提升我们对Scratch中各个积木块的认知,如果你周围的小朋友对Scratch感兴趣,可以把他邀请进来,跟我们一起学习,一起升级打怪。