1

分享

【Scratch 教學】重複收廣播 1 - Scratch 中常犯的錯

已經很多次了,幫學生解 bug 時,發現問題都是因為短時間內重複收廣播而造成的。很訝異這個事情很多書都沒有提,傑夫老師就在這裡寫出來,讓大家都知道。
本篇內容部分取材自 Scratch 專家 Cliff Davies 的 "Scratch and its inner workings"。雖然本篇內容還是與 Scratch 的執行緒有關,但在此盡量不提僅說明結果。
把問題簡化成下面這個專案,角色『Cat』透過一個變數『要說的話』利用廣播『骷髏說話』讓另一個角色『Skeleton』說出變數中的話。
角色 Cat 的程式如下:
Scratch Scratch教學 傑夫老師 Scratch廣播

Cat 透過變數與廣播讓 Skeleton 說話

角色 Skeleton 的程式如下:
Scratch Scratch教學 傑夫老師 Scratch廣播

Skeleton 只負責說話

執行結果如下:
Scratch Scratch教學 傑夫老師 Scratch廣播

結果是 Skeleton 只說了第四句話

沒看錯!Skeleton 只說了第四句話。原因就在於當一個『當收到訊息XXX』為首的程式積木串,如果在還沒執行完所有的程式前,又收到了一次這個廣播訊息,那麼此段程式會被中斷並重頭開始執行。
Skeleton 每說一句話需要 2 秒,但 Cat 以飛快的速度改變了『要說的話』裡面的值並發出廣播訊息,Skeleton 收到了第 1 個廣播要說出「第一句」話的時候,馬上收到了第 2 個廣播,所以「第一句」話還沒說出來,就被打斷了。同樣道理,「第二句」與「第三句」也都一樣,最後的結果就只說出了「第四句」。
結論就是不能短時間內重複"收"廣播,更嚴格的說,是不能重複"發"廣播。那要怎麼解決?這不是唯一的解法,但順便介紹一個大多數人不常用的方式『廣播訊息XXX並等待』。
『廣播並等待』會等到相應的廣播訊息的程式做完了,才會執行下一個程式積木。所以 Cat 的程式改成下面這樣,就能解決問題了。
Scratch Scratch教學 傑夫老師 Scratch廣播

改用廣播並等待就能解決問題

改用廣播並等待之後執行結果如下:
Scratch Scratch教學 傑夫老師 Scratch廣播

Skeleton 說出 4 句話

除了廣播,還有一個地方也會有一樣的問題喔!想知道的話,請看下一篇。Bye now~
#Scratch  #Scratch教學  #傑夫老師  #Scratch廣播 
分類:學習

傑夫(Jeff)老師喜歡研究積木型(block)程式,如:Scratch, App Inventor, micor:bit,除了有一般中小學生的課程,也不定期的會開設Scratch師資培訓班,並且是「Scratch的100個技巧」的共同作者。

評論
上一篇
  • 【Scratch 教學】等待 0 秒? 3 - Scratch 執行緒深入研究
  • 下一篇
  • 【Scratch 教學】重複收廣播 2 - Scratch 中常犯的錯
  • 更多文章
    載入中... 沒有更多了