克隆网格

时间:2017-03-23 18:34:50

标签: mit-scratch

我的目标是建立一个5x5的图像网格。在以下代码中,rowcolrowcol被创建为精灵的本地变量,newcolnewrowcats是全球。 (顺便说一句,是否可以判断哪些变量是本地变量,哪些变量是全局变量?它很容易被遗忘或出错。)

code

结果是仅5x1网格,如此处所示。

results

我不清楚这些陈述的执行顺序。在when I start as a clone第二次被调用之前或之后是否会调用add_cat?我的初步结论是,它后来被调用,但克隆的全局变量似乎预先包含了它们的值。

当我尝试使用asksay以及wait命令对其进行调试时,结果差异很大。在某些地方添加此类暂停可以完全解决问题,从而产生5x5网格。在其他地方,他们造成1x5网格。

主要问题是:如何解决这个问题,以便产生5x5网格?

1 个答案:

答案 0 :(得分:5)

解释

不幸的是,Scratch中的执行顺序有点奇怪。无论何时编辑脚本(通过添加或删除块,编辑输入或将整个脚本拖动到编辑器中的新位置),它都会放在列表的底部(因此它最后运行)。

测试这个的好方法是使用以下脚本创建一个空白项目:
two similar scripts

当你点击绿色标志时,精灵将 说"脚本1"或者"脚本二",取决于哪个先运行。尝试单击并拖动其中一个when green flag clicked块。下次单击绿色标记时,精灵会说出与您刚刚拖动的脚本相对应的消息。

这种疯狂的命令会使执行难以置信,尤其是在使用克隆时。

解决方案

唯一真正的解决方案是编写内置有明确执行顺序的代码(而不是依赖于编辑器的奇思妙想)。对于更简单的脚本,这通常意味着使用broadcast and wait块以必要的顺序运行特定事件。

对于您的具体项目,我看到两个主要解决方案:

程序解决方案 这是最直接的剧本,它可能是我选择的: procedural solution
rowcol都是精灵变量)
由于克隆在创建时会继承所有仅精灵变量值,因此每个克隆在创建时都将保证具有正确的行和列。

递归解决方案 这个解决方案比第一个解决方案有点难以理解,所以除非你只是寻找新奇事物,否则我可能会避免使用它:
recursive solution