Scratch在[控制]类积木下有一种积木称为[停止脚本执行],如图所示:
如上图所示,共有三种应用情形。
(1)停止(全部脚本):终止整个程序执行,彻底退出程序;
(2)停止(这个脚本):终止这个角色对应的当前代码组(本积木所在代码组)的执行,而不影响当前角色其他代码组的执行;
(3)停止(该角色的其他脚本):终止执行这个角色其他代码组的执行,而不影响当前代码组(本积木所在代码组)的执行。
在实际应用中,我们不仅要关注这个积木各个命令本身,还要观察此积木的形状。细心的小程序员会注意到,在情形(1)和(2)时,这个积木底部是平面的,意即此时后面不能再接续其他积木代码了!
但是,在情形(3)时,这个积木底部变成凹形,意即此时后面可以再接续其他积木代码!这是基于实际程序开发中的需求,Scratch开发人员作出的明智决定,参考下图。
下面例子给出了此积木的典型应用:
上面两组代码是应用于某一个程序的舞台角色上。左边代码的含义是在通常情况下,开始运行程序后,连续地播放舞台背景音效。
右边的含义:当舞台收到“end”消息时会通过调用上面的积木块(情形3)硬性结束舞台背景音效的播放(可能很长),然后开始播放另一段指定音效。
在情形(2)时,简单情况下,此功能意思是结束当前代码组的执行。但是,在有些复杂的开发中(实际应用软件开发需求是各种各样的),这块积木具有明确的局限性。请看下面的例子:
上面代码中我在当前调试的植物大战僵尸游戏中使用的,代码意思很明确:通过上述两个自定义积木计算当前要种植的植物的坐标位置。
但是,在创建上面代码前我使用了一个自定义积木,如下所示,想一次性计算出要种植的植物的坐标位置。大家看看有没有问题:
注意,上面代码的意思是,先求X坐标,再求Y坐标,分别把求得的结果存储到两个变量中。但是,由于计算中要求遍历列表来计算,即需要使用循环来确定玩家点击的鼠标位置,然后确定要种植的坐标区间。而为了提高程序效果,一旦计算出这个坐标值,应当立即结束当前循环的执行(再执行没有必要),再继续往下执行求后面的Y坐标。
上面示例中很典型中说明了Scratch终止类积木的第(2)种情形的需要,但是,上面代码存在明显错误,即第一处调用后,此代码组一次性结束执行,后面不会再求Y坐标了。
为此,我想到的办法之一是:使用上面两组积木方案,即X坐标与Y坐标单独分别求解。
再想想,上面自定义积木“计算待植物的坐标”能够稍微改进一下,也能实现我们的计算目的呢?
当然有。答案还在于:自定义积木。
因为根据上面分析,在情形(2)时,这个积木底部是平面的,意即此时后面不能再接续其他积木代码了!但是,Scratch自定义积木总是会以后面可以接续其他积木的方式出现,即总是凹形的。于是有下面办法来改进上面的Scratch默认的情形(2)停止积木的局限性:
有了上面定义后,结果显示如下:
如何?问题显示得以解决!只需要把上面“停止(这个脚本)”这块内置积木更换成我们自己的“停止这个脚本扩展”这块积木即可.
原文地址:https://blog.51cto.com/zhuxianzhong/2499860