使用自定义块使您的便签代码更高效
现在,您已经遍历了Scratch上这个初学者系列的大部分内容。 您已经创建了一个游戏,其中用户用螃蟹追逐一只猫,猫说“哦!”。 当螃蟹夹住它时,分数保持不变。 游戏中有一些动画并保持得分,并在最后显示得分。
在这一部分中,我们将继续进行该项目。 我们将使用一个自定义块来使我们的代码更整洁并且更易于使用。
自定义块的使用
自定义块有一些用途:
- 使用它们将DRY (不要重复自己)原理应用于您的项目,用自定义块替换您多次使用的块。 这样,您可以一次定义一个例程,然后在需要时通过将自定义块插入到项目中来使用它。
- 如果您的脚本变大且笨拙,请使用它们来整理内容并将长的例程存储在其他位置。
- 创建递归例程,如果满足或不满足条件,则在该例程中再次运行。
- 创建例程,每次将例程或脚本添加到脚本时,都可以更改值或字符串。
在本教程中,我们将使用前三种方法。
您需要什么
要完成本教程,您需要:
- Scratch的免费帐户
- 可访问Scratch的网络浏览器(我建议使用现代浏览器,例如Chrome,Firefox,Safari或Opera,以获得最佳体验)
入门
我们将使用本系列最后一部分中创建的动画项目。 我们将使用到目前为止已创建的资产和脚本,并添加更多内容。
根据您是否使用该教程,有两种方法可以开始本教程:
- 打开您为上一个教程创建的项目,并进行复制。
- 重新混合我创建的项目以支持上一个教程。
另外,您可以继续在已经创建的同一项目中工作。 这是您执行上述每一项操作的方式(您只需执行一项操作)。
复制自己的项目
打开Scratch并转到要复制的项目。 确保单击了“ 查看内部”按钮,以便可以查看项目的工作情况。
在工具栏中,单击文件>另存为副本 :
Scratch将打开您的新副本。 重命名并开始处理。
重新混音我的项目
登录Scratch并转到我的动画项目页面。
单击“ 查看内部”按钮以查看项目:
现在,单击“ 混音”按钮。 Scratch会将我的项目的副本保存为您帐户中的新项目。 重命名它,您就可以开始了!
创建自定义块以避免重复
首先,您需要确定自定义块将使脚本更高效。 在此项目中,舞台的主要脚本包括两行的重复:
-
wait 1 secs
-
change Timer by -1
这里没有太多重复的代码,因此在实际项目中,您可以选择保留原样,但是出于本教程的目的,让我们用自定义块替换它。
选择舞台 ,然后单击“ 更多块” 。 单击“ 阻止”按钮。 将显示“ 新块”对话框:
现在,您将看到一个名为define Count down every second
的新脚本“帽子” define Count down every second
(或您所说的任何东西) define Count down every second
:
要定义此块,您需要在“帽子”下方添加将替换的块。 这些将wait 1 secs
, change Timer by -1
个块。
完成此操作后,请在其中包含这两个重复块的位置编辑脚本,以便每次将这两个块替换为您的自定义块。 该脚本现在将具有11个代码块,而不是14个:
这仅使该脚本中的代码减少了三行,但是您可以看到您是使用较大的例程还是更频繁地重复执行它们(对于不同的sprites),它将使事情变得更有效。 如果要使自定义块应用于所有精灵,请在舞台中创建它。
创建自定义块以缩短脚本
使用自定义块的另一种方法是替换脚本中的大型例程,从而使脚本更短,更易于管理。 cat sprite目前在其主脚本中具有很多块,因此让我们将此原理应用于此。
这是cat脚本现在的样子:
让我们创建两个自定义模块:一个用于要求用户定义猫会说什么的例程,另一个用于使猫对被螃蟹捕捉做出反应的例程。
确保已选择猫,然后转到“ 更多块”部分。 单击创建块按钮,然后命名您的第一个块。 我将其称为:“用户定义猫的声音”。
现在,将运行该例程的块拖到自定义块的“帽子”中。 您需要移动的块如下:
-
ask Should the cat meow or scream when it's nipped by the crab? and wait
-
if answer = meow then
-
say meow for 2 secs
-
else
-
if answer = scream then
-
say Scream! for 2 secs
确保将这些块下面的任何块拖回原始脚本。
现在,将User defines cat sound
块添加到您原始脚本中的上面的块中。
在下面的代码行中重复此操作,创建一个名为Cat reacts to being caught
的新自定义块, Cat reacts to being caught
的块,向其添加块,然后将新的Cat reacts to being caught
块添加至原始脚本。
这是猫的脚本现在的样子:
代码量是相同的,但是通过分离两个例程,您可以更轻松地查看原始脚本中正在发生的事情。 某些人会发现这是一种有用的技术,而另一些人则更愿意坚持将所有块都保存在一个长脚本中!
为递归例程创建自定义块
自定义块的另一个用途是创建一个递归例程,其中一个例程可以在其内部运行。 通过创建一个更容易解释。
User defines cat sound
了我们刚刚User defines cat sound
自定义块,要求用户输入猫将发出的声音。 如果用户键入“喵”或“尖叫”,则脚本对此做出反应。 但是,如果用户输入错误或键入其他内容该怎么办? 如果发生这种情况,我们想向用户显示一条消息,然后再次提出问题。 我们可以通过使User defines sound
例程递归来做到这一点。
选择猫精灵,然后编辑User defines cat sound
自定义块。 通过更换开始if
内部块else
的第if - else
与第二块if - else
块。 确保将条件( answer = scream
)从原始if
块复制到新的if - else
块的if
部分中。 移动say Scream! for 2 secs
在if - else
块的if
循环内阻塞say Scream! for 2 secs
。
现在在if - else
块的else
部分中,添加以下块:
-
say Sorry, I didn't catch that for 1 secs
-
set Timer to 0
-
User defines cat sound
这是脚本的外观:
现在,如果用户输入了错误的答案,猫会说:“对不起,我没听清楚”,计时器将重置为零,例程将再次运行,询问用户他们希望猫听什么声音使。
摘要
自定义块是Scratch中非常有用的工具。 从本教程中学到的知识,您可以使用它们来保存在项目中一次又一次地重复执行一组块的操作,也可以定义例程,然后将其添加到脚本中,从而使脚本更易于管理。 如果在满足条件的情况下需要重复执行例程,则可以创建一个递归例程,例如为猫创建的递归例程。
您还可以在自定义块中包括字符串,数字和布尔输入,这意味着每次将块添加到脚本时,都可以更改其工作方式。 有关更多信息,请查看Scratch Wiki 。
您的Scratch项目现已完成! 在本系列的下一个也是最后一部分,我们将研究如何共享您的作品并创建工作室来进行协作。