用户:
SKQA查看:4 回复:3 评论:4 创建时间:2020-04-16T18:03:48
在第三节“搭建流程结构以充分利用广播”中,我们说初始化一定需要广播并等待。这是为什么呢?我们来看一个很小的例子。
你说这个程序,角色会移动10步吗?
这个问题你吃的准吗?吃不准。因为多个绿旗点击的顺序是随机的,你不知道谁先执行。所以,你不知道某变量是设为1先执行还是设为2先执行。这就吃不准到底是1还是2了。
有可能你还没听懂,那我就举一个实例。
现有两个角色,外观都一样,都是一个椭圆,且位置不相同。两个椭圆的程序都一样,如下图。
你知道这程序执行出来啥样吗?
经多次实验,发现极大可能性某一个角色会缺少一椭圆。这是为啥?
因为scratch执行程序不可能同时执行两个程序的,除非有两个scratch才行。而scratch能做到的,是在最短时间内执行两个程序。也就是说,scratch不可能同时执行两个程序,每个程序肯定都是有执行的顺序的。而至于谁先谁后,scratch会随机挑选,你吃不准的。而为什么这个案例会缺少一椭圆呢?是因为,当角色2清空并第一次图章,此时角色1执行清空了,也就是把角色2的印章清掉了,因此才会少一个椭圆。
那怎么解决这个问题呢?
一、广播
广播是一个很好的办法。
可以先等一个角色执行完最后一次图章后,这时发送广播,另外一个角色接收到广播后再去执行自己的印章,不过清空要去掉;
也可以发送广播先等清空完之后再去同时图章,但这与两个角色无关,我们需要让背景来做清空操作。
这两种方法,你喜欢哪种呢?
我喜欢第二种。有很多训练师喜欢第一种,我说说我的理由。因为第一种方法完全改变了顺序,程序的执行过程就会发生改变;而第二种方法没改变执行顺序,依旧先清空再去各做各的图章。
这两种方法,你学会了吗?
看看第二种方法。
二、等待0秒
别慌!很多人说等待0秒是没有意义的,但如果你在9020年再这样想,那你就错啦!
啥意思呢?
等待0秒是有意义的。
等待0秒有什么意义呢?等待0秒,并不是你们想象的“等个空气”,scratch执行程序不会这么执行,scratch会尝试先执行其他的程序。就拿第一个案例说吧,如果你想保证最终“某变量”=1,你某变量设为2的程序一定要先做,而下一次做就会遮盖2。理清楚思路后,就可以得到下图的程序。
当然在第二个案例中不能这样做,只能用广播来做,有兴趣的训练师们可以试一试哦~