很多初学者在Scratch3的复杂判断中会出现bug,比如下面这个程序:
我们希望是两球相撞后同时消失,于是就写了上述两段程序。
表面上看没有问题,但是实际情况并不是两个小球同时消失,而是黄球消失,蓝球还在。
为什么呢?
原因是Scratch3编译我们的积木的时候,是有先后顺序的,并不是真正意义上的并行。程序先执行我们先拖拽的黄球积木,然后是蓝球,再黄球,再蓝球。
在相撞的时候,黄球会先判断,于是把自己隐藏,而隐藏之后,蓝球再执行,就无法碰到黄球,而导致出现bug:
我们在多线程的程序里经常遇到这种bug,而处理方法也很简单:
我们只要设定一个状态变量,不管是哪个球先判断,直接改变这个状态变量值,每个球只要判断这个值的变化而已,如下图:
根据上图程序,我们只要每个球判断一下自己应该所属的状态值即可。
也有同学会采用等待0.01秒的方法,让蓝球先消失后黄球再消失,这些小技巧并不能解决实质的问题,写简单的程序可以这样,稍微复杂的程序,需要精准控制的程序,我们还是需要用状态变量来确定,这个习惯对未来学习会很有帮助。