A Grid of Clones

℡╲_俬逩灬. 提交于 2019-12-12 13:29:29

问题


My goal is to build a 5x5 grid of images. In the following code, row, col and rowcol were created as variables local to the sprite, and newcol, newrow and cats are global. (By the way, is it possible to tell which variables are local and which are global? It's easy to forget or make mistakes.)

The result is a 5x1 grid only, as seen here.

I am unclear as to the order of execution of these statements. Does when I start as a clone get called before or after add_cat gets called the second time? My tentative conclusion is that it gets called afterwards, yet the clone's global variables seem to contain their values from beforehand instead.

When I attempted to debug it with ask and say and wait commands, the results varied wildly. Adding such pauses in some places fixed the problem completely, resulting in a 5x5 grid. In other places, they caused a 1x5 grid.

The main question is: How to fix this so that it produces a 5x5 grid?


回答1:


Explanation

Unfortunately, the execution order in Scratch is a little bizarre. Whenever you edit a script (by adding or removing blocks, editing inputs, or dragging the entire script to a new location in the editor), it gets placed at the bottom of the list (so it runs last).

A good way to test this out is to create a blank project with the following scripts:

When you click the green flag, the sprite will either say "script one" or "script two", depending on which runs first. Try clicking and dragging one of the when green flag clicked blocks. The next time you click the green flag, the sprite will say whichever message corresponds to the script you just dragged.

This crazy order can make execution incredibly unpredictable, especially when using clones.

The solution

The only real solution is to write code that has a definite execution order built-in (rather than relying on the whims of the editor). For simpler scripts, this generally means utilizing the broadcast and wait block to run particular events in the necessary order.

For your specific project, I see two main solutions:

Procedural Solution This is the most straightforward script, and it's probably what I would choose to go with:

(row and col are both sprite-only variables)
Because clones inherit all sprite-only variable values when they are created, each clone will be guaranteed to have the correct row and col when it is created.

Recursive Solution This solution is a bit harder to understand than the first, so I would probably avoid it unless you're just looking for the novelty:



来源:https://stackoverflow.com/questions/42984298/a-grid-of-clones

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!