我的目标是建立一个5x5的图像网格。在以下代码中,row
,col
和rowcol
被创建为精灵的本地变量,newcol
,newrow
和cats
是全球。 (顺便说一句,是否可以判断哪些变量是本地变量,哪些变量是全局变量?它很容易被遗忘或出错。)
结果是仅5x1网格,如此处所示。
我不清楚这些陈述的执行顺序。在when I start as a clone
第二次被调用之前或之后是否会调用add_cat
?我的初步结论是,它后来被调用,但克隆的全局变量似乎预先包含了它们的值。
当我尝试使用ask
和say
以及wait
命令对其进行调试时,结果差异很大。在某些地方添加此类暂停可以完全解决问题,从而产生5x5网格。在其他地方,他们造成1x5网格。
主要问题是:如何解决这个问题,以便产生5x5网格?
答案 0 :(得分:5)
不幸的是,Scratch中的执行顺序有点奇怪。无论何时编辑脚本(通过添加或删除块,编辑输入或将整个脚本拖动到编辑器中的新位置),它都会放在列表的底部(因此它最后运行)。
当你点击绿色标志时,精灵将 说"脚本1"或者"脚本二",取决于哪个先运行。尝试单击并拖动其中一个when green flag clicked
块。下次单击绿色标记时,精灵会说出与您刚刚拖动的脚本相对应的消息。
这种疯狂的命令会使执行难以置信,尤其是在使用克隆时。
唯一真正的解决方案是编写内置有明确执行顺序的代码(而不是依赖于编辑器的奇思妙想)。对于更简单的脚本,这通常意味着使用broadcast and wait
块以必要的顺序运行特定事件。
对于您的具体项目,我看到两个主要解决方案:
程序解决方案
这是最直接的剧本,它可能是我选择的:
(row
和col
都是精灵变量)
由于克隆在创建时会继承所有仅精灵变量值,因此每个克隆在创建时都将保证具有正确的行和列。