2017-03-23 93 views
3

我的目標是建立一個5x5的圖像網格。在下面的代碼中,row,colrowcol被創建爲精靈本地的變量,並且newcol,newrowcats是全局的。 (順便說一下,纔有可能知道哪些變量是局部的,這是全球性的?這很容易忘記或犯錯。)克隆網格

code

的結果只有一個5X1格,如在這裏看到。

results

我不清楚這些語句的執行順序。 when I start as a clone在第二次被叫到add_cat之前或之後被叫到嗎?我的試探性結論是事後得到調用,但克隆的全局變量似乎包含事先提供的值。

當我試圖用asksaywait命令進行調試時,結果變化很大。在一些地方添加這樣的暫停可以完全解決問題,從而產生5x5的網格。在其他地方,他們造成了1x5的網格。

主要問題是:如何解決這個問題,使它產生一個5x5網格?

回答

5

說明

不幸的是,Scratch中的執行順序有點奇怪。無論何時編輯腳本(通過添加或刪除塊,編輯輸入或將整個腳本拖到編輯器中的新位置),它都會放在列表的底部(以便最後運行)。

測試了這一點的一個好方法是創建以下腳本一個空白的項目:
two similar scripts

當你按一下綠色旗幟,精靈將要麼說:「劇本一」或「腳本兩個「,這取決於哪個先運行。嘗試點擊並拖動when green flag clicked塊之一。下次單擊綠色標誌時,精靈將會顯示與剛纔拖動的腳本相對應的消息。

這個瘋狂的訂單可能令執行變得難以置信,特別是在使用克隆時。

解決方案

,唯一的解決方法就是寫出具有內置的(而不是依賴於編輯器的率性)一個明確的執行順序碼。對於更簡單的腳本,這通常意味着使用broadcast and wait塊以必要的順序運行特定事件。

爲了您的具體項目,我看到了兩個主要的解決方案:

程序解決方案 這是最簡單的腳本,它可能是什麼,我會選擇去有:
procedural solution
rowcol都是精靈變量)
由於克隆在創建時會繼承所有僅包含精靈的變量值,因此每個克隆將保證具有正確的行並創建時間。

遞歸解決方案 該解決方案是有點難度比第一明白,所以我可能會避免,除非你只是在尋找新奇:
recursive solution

+2

很好的解釋,直上我的設置關於Scratch如何工作的幾點意見。類似於您的遞歸解決方案在我的項目中工作。請注意,遞歸提供的不僅僅是新穎性。我的實際項目需要使用簡單的程序方法無法實現的多個分支。這可以通過使用列表作爲先進先出的堆棧來完成,但這至少與使用遞歸一樣複雜,並且不太優雅。 –