国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

極客小將

您現在的位置是:首頁 » scratch編程資訊

資訊內容

控制Scratch異步代碼的執行順序

極客小將2020-11-30-
你是否在編寫項目時遇到過一些棘手的BUG,比如邏輯明明是通順的,但是執行結果卻不符預期。又如兩段代碼完完全全一模一樣,但是結果卻大相徑庭。這極有可能是代碼的執行順序沒有得到控制所導致的,這是一些初學者常常會遇到的問題。本文將分析這種代碼執行順序失控的原因及其應對方法。

你是否在編寫項目時遇到過一些棘手的BUG,比如邏輯明明是通順的,但是執行結果卻不符預期。又如兩段代碼完完全全一模一樣,但是結果卻大相徑庭。這極有可能是代碼的執行順序沒有得到控制所導致的,這是一些初學者常常會遇到的問題。本文將分析這種代碼執行順序失控的原因及其應對方法。


01

依照慣例,先來看幾個案例。

《恐龍吃蘋果》

upload/article/images/2020-11-30/bafc7e4c4d9539a7ced0fde06ac452e9.jpg

舞臺布局

upload/article/images/2020-11-30/7632dc316c2e8f27f774e4ea5d216e1c.jpg

恐龍代碼

使用鍵盤方向鍵控制恐龍移動,點擊綠旗使恐龍回到起始位置,準備進行下一次游戲。

upload/article/images/2020-11-30/88786520368583c25850732317fbf290.jpg

蘋果代碼

判斷蘋果是否碰到恐龍,一旦碰到則隱藏,當綠旗被點擊時將蘋果切換至顯示狀態,準備進行下一次游戲。

案例很普通,代碼也普通得不能再普通了,都進行了初始化操作,甚至可以說代碼是比較規范的。那么來看一下實際運行效果。

https://cdn.china-scratch.com/timg/191028/13111012R-3.gif

案例效果

注意到問題所在了嗎?在圖中,一共點擊了三次綠旗,第一次,啟動程序,控制恐龍移動,蘋果被恐龍吃掉-隱藏;第二次點擊綠旗,重啟程序,恐龍確實回到初始位置了,但是,明明設置了顯示狀態的初始化,蘋果卻并沒有出現。第三次點擊綠旗才出現。

問題是,為什么第二次點擊綠旗時,蘋果沒有按照預想的那樣,切換成顯示狀態呢?

在Scratch中遇到BUG時,有很多種調試方法,這次介紹一種變量法,通過變量來判斷某處代碼是否執行、執行次數。

upload/article/images/2020-11-30/5fc23c51462d0f88e614eda8245d1cee.jpg

新建變量“score”,在蘋果代碼中增加【將(score)增加(1)】

為了調試BUG,因此在這里不對變量做初始化。

https://cdn.china-scratch.com/timg/191028/131111IO-5.gif

調試效果

變量score初始值為0,在第一次點擊綠旗,被恐龍吃掉后,score的值變為1,此時再次點擊綠旗重啟程序,恐龍回到初始位置,蘋果沒有顯示,而score的值此時變為2,說明畫圈處的代碼被執行了兩次。

upload/article/images/2020-11-30/540f02b8400d83cc475004d5ba5ed8d0.jpg

所以,蘋果并不是沒有顯示,而是顯示后再一次碰到恐龍,再次隱藏。唯一合理的解釋是,在第二次點擊綠旗時,蘋果的代碼被先執行了,而此時恐龍并沒有回到初始位置,因此蘋果再次碰到恐龍,再次隱藏。這時候再執行恐龍的代碼,恐龍回到初始位置,為時已晚,蘋果已經被恐龍“誤食”了。

在Scratch中,看似同時執行的代碼,實則是有先后順序的。兩段代碼沒有按照預想的先后順序執行,導致程序初始化時出現BUG。

很多初學者經常會遇到這樣的問題,有的程序點擊一次是無法正常運行的,第二次點擊才會正常。大多數情況其實和上文中展示的這個案例屬于同一種情況。如果再次遇到類似這樣的情況,就要好好考慮一下是不是由于沒有控制好代碼的先后執行順序而導致初始化BUG。


02

這個問題應該如何解決呢?既然是代碼執行順序不受控制,那么最簡單的方法就是通過【等待()秒】積木來調整順序。我們希望的是恐龍先“離開事發地點”,回到初始位置,再執行蘋果是否碰到恐龍的代碼,只需要在點擊綠旗后,等待一段短暫的時間再執行這段代碼即可。

upload/article/images/2020-11-30/947bf319dd31069a3f36a0b5b1b79dc5.jpg

至于等待的時間,設置成0.1還是0.01其實都可以,但是在這里我建議將數值設為0,即【等待(0)秒】。兩段當綠旗被點擊積木下的代碼的先后執行順序間隔非常短,等待0秒積木足以改變其順序。因為【等待()秒】積木會刷新屏幕,而刷新屏幕相對來說耗時較長(參見淺談Scratch的舞臺刷新機制 Part 2——在常規積木中的應用)。

https://cdn.china-scratch.com/timg/191028/1311125O0-8.gif

加入【等待(0)秒】后,蘋果初始化正常

這在我看來有兩點意義,一是副作用最小,我們的目的是控制程序運行的先后順序,但是如果等待的時間過久,會造成明顯的卡頓,因此在能保證代碼運行順序的前提下,時間越短越好。二是起到一種標志作用,這種特殊的用法我們不妨約定俗成地將其視作為解決這類BUG的標志,一旦看到這樣的用法,就知道是用來控制代碼執行順序的。

關于【等待(0)秒】還可以參照科技傳播坊疑難雜癥視頻 vol.41 《等待0秒的意義》。


03

BUG是解決了,但是在《恐龍吃蘋果》這個案例中,為什么是先執行蘋果的代碼再執行恐龍的代碼?而不是反過來呢?是什么決定了代碼的執行順序?

為了更直觀地表現代碼的執行順序,我們換一個更簡單的案例,通過變量來展現執行順序。

https://cdn.china-scratch.com/timg/191028/1311124R7-9.gif

圖層順序對于異步代碼執行順序的影響

初始狀態下,橘貓的代碼是將變量設為0,圖層在后,藍貓的代碼是將變量設置為1,圖層在前。運行結果為0,表明藍貓的代碼先執行了,橘貓后執行,將變量覆蓋為0。

通過鼠標拖拽改變圖層順序,將橘貓圖層置于藍貓前面。運行結果為1,表明橘貓的代碼先執行了,藍貓后執行,將變量覆蓋為1。

通過實驗我們可以得出以下結論:

不同角色的異步代碼執行順序如下:角色圖層在前的先執行,圖層在后的后執行,此規則亦適用于舞臺,其圖層永遠在最后層。

為排除鼠標拖拽可能產生的其他因素,通過代碼調整圖層順序,結論依舊成立。


04

盡管調整圖層順序是一種可控的、確定的能控制異步代碼執行順序的方法,但是編寫程序的我們不可能通過手動拖拽角色來控制代碼執行順序。萬一體驗者在非全屏模式下不小心拖拽了某個角色,改變了執行順序而導致BUG。代碼明明完全一樣,但就是無法正常運行,那將會是一件多么尷尬的事。(下次再遇到這樣的情況可以考慮一下是否是因為圖層順序影響了代碼執行順序,而又沒有很好地控制執行順序)

為控制代碼執行順序,上文中也提到了,可以使用【等待(0)秒】積木來解決,這種方法簡單直接,且對原代碼的改動最小,建議新手使用。

但是這是一種“把代碼寫死”的做法,在此給追求優質代碼的scratchers提供一種更完美的思路——消息,利用消息來控制代碼的執行順序。

upload/article/images/2020-11-30/b46031e64db6d57868ff47978a5f4dca.jpg

橘貓代碼

upload/article/images/2020-11-30/f061d738df36131663e95c8fb94de0f1.jpg

藍貓代碼

upload/article/images/2020-11-30/fc8891d56d48f8656a1cf3e4270c9d1d.jpg

通過【廣播()并等待】實現同步

upload/article/images/2020-11-30/764bfaaa8d1c85c95a6313163113fced.jpg

隨手畫的流程圖

控制代碼的執行順序,你學會了嗎?

聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除

預約試聽課

已有385人預約都是免費的,你也試試吧...

国产乱子伦高清露脸对白-国产精品欧美久久久久天天影视-国产91视频一区-亚洲欧美日产综合在线网-黄视频网站在线看-国产欧美亚洲精品第1页-亚洲www在线-大学生女人三级在线播放-日本在线视频www鲁啊鲁-国产成人精品一区二区仙踪林-69精品欧美一区二区三区-成人欧美亚洲-日本污污网站-中国妞xxxhd露脸偷拍视频-国产精品aⅴ在线观看-精品中文字幕在线

        www.亚洲天堂网| 成人免费观看cn| 高清av免费看| 青青青国产在线视频| 国产精品人人爽人人爽| 狠狠爱免费视频| 午夜免费精品视频| 可以在线看的黄色网址| 国内自拍视频一区| 国产三级国产精品国产专区50| 成人综合视频在线| 精品国产av无码一区二区三区| 99视频精品免费| 亚洲黄色小视频在线观看| 九热视频在线观看| 久热精品在线播放| 性做爰过程免费播放| 欧美一级爱爱视频| 欧美三级一级片| 色一情一区二区三区| 男女激烈动态图| 日本大片免费看| aaaaaa亚洲| 免费成人深夜夜行网站视频| 日韩精品在线中文字幕| 91制片厂毛片| 日韩精品视频在线观看视频 | 天天干天天曰天天操| 97av中文字幕| 午夜免费福利视频在线观看| 免费极品av一视觉盛宴| 亚洲三级视频网站| 色天使在线观看| 国产成人生活片| 97超碰人人看| 激情内射人妻1区2区3区| 国产女教师bbwbbwbbw| 一级黄色特级片| 国产l精品国产亚洲区久久| 蜜桃网站在线观看| 国内av一区二区| 国产视频手机在线播放| 国产又黄又猛视频| 少妇高潮喷水在线观看| 国产av天堂无码一区二区三区| 色91精品久久久久久久久| 男人舔女人下面高潮视频| 国产二区视频在线播放| 欧美韩国日本在线| 亚洲综合在线网站| 91香蕉视频污版| www.com操| 91 视频免费观看| 性欧美18一19内谢| 人人妻人人澡人人爽欧美一区双 | 国产精品wwwww| 久草资源站在线观看| caopor在线视频| 亚洲欧美aaa| 午夜天堂在线视频| 天天综合成人网| 三级在线免费观看| 欧美一级视频免费看| 成年人在线观看视频免费| 做a视频在线观看| 蜜桃网站在线观看| aaa毛片在线观看| 老司机午夜网站| 成人在线免费播放视频| 中文字幕国产高清| 三上悠亚久久精品| 超碰免费在线公开| av免费网站观看| 亚洲人成无码网站久久99热国产 | 国产 国语对白 露脸| 日韩欧美视频免费在线观看| 97国产精东麻豆人妻电影| 久久99爱视频| 免费高清在线观看免费| www.男人天堂网| 亚洲制服在线观看| 国产高清精品在线观看| 成人精品视频在线播放| 亚洲午夜精品一区| 国产欧美高清在线| www污在线观看| 成人国产在线看| eeuss中文| 17c国产在线| 亚洲成年人专区| 午夜免费福利网站| 中文字幕国产高清| 永久免费黄色片| 粉嫩av一区二区三区天美传媒| 911av视频| 992tv成人免费观看| 裸体裸乳免费看| 国产高清av在线播放| 亚洲 自拍 另类小说综合图区| 人人妻人人澡人人爽欧美一区| 亚洲xxx在线观看| 午夜免费看视频| 国产又大又长又粗又黄| 97超碰人人澡| 搡女人真爽免费午夜网站| 中文字幕第一页在线视频| 国产对白在线播放| 国产成人黄色片| 亚洲精品中文字幕乱码无线| 天堂av在线中文| 热久久精品免费视频| www.日本一区| 成人中文字幕在线播放| jizz欧美性11| 国产综合av在线| 国产对白在线播放| 国产精品人人爽人人爽| 人人妻人人澡人人爽欧美一区| 小泽玛利亚视频在线观看| 亚洲熟妇无码av在线播放| www.久久久精品| 日韩在线第三页| 欧美色图色综合| 男人添女荫道口女人有什么感觉| 少妇高清精品毛片在线视频 | 久久久精品高清| www.欧美黄色| 在线观看日本www| 亚洲国产日韩欧美在线观看| 3d动漫一区二区三区| 成年丰满熟妇午夜免费视频| 天天爽夜夜爽一区二区三区| 三级4级全黄60分钟| 色欲av无码一区二区人妻| 成人精品视频在线播放| 国产盗摄视频在线观看| 国产女人18毛片| 免费看黄色a级片| 日韩中文字幕亚洲精品欧美| 手机av在线网站| 亚洲综合激情五月| 国产精品美女在线播放| 影音先锋男人的网站| 五月天男人天堂| 欧美日韩激情四射| 国产九九九九九| 黄色片在线免费| 欧美一级黄色录像片| 加勒比成人在线| 苍井空浴缸大战猛男120分钟| 欧洲黄色一级视频| 小泽玛利亚视频在线观看| 亚洲图色中文字幕| 拔插拔插海外华人免费| 少妇人妻互换不带套| 亚洲 国产 图片| 小早川怜子一区二区三区| 人妻久久久一区二区三区| 色一情一乱一伦一区二区三区日本| 手机在线免费观看毛片| 丰满人妻一区二区三区53号| 男人操女人免费| 91午夜在线观看| 91丝袜超薄交口足| 少妇人妻互换不带套| 亚洲理论电影在线观看| 欧洲美女亚洲激情| 国产三级日本三级在线播放| 每日在线观看av| 亚洲av综合色区| 中文字幕一区二区三区四| 99视频免费播放| 91精品91久久久中77777老牛| 男女裸体影院高潮| 国产欧美激情视频| av中文字幕网址| 亚洲综合日韩欧美| 一区二区三区 欧美| 欧美三级在线观看视频| 黄色a级片免费看| 无码av天堂一区二区三区| www.69av| 男女激情无遮挡| 免费涩涩18网站入口| 中文字幕第80页| 中文国产在线观看| 青青草原网站在线观看| 在线观看污视频| 99精品一级欧美片免费播放| 三年中文高清在线观看第6集| av久久久久久| 欧美视频在线播放一区| 精品视频无码一区二区三区| 欧美伦理片在线看| 欧美 另类 交| 免费观看精品视频| 中文字幕国产高清| 免费看国产曰批40分钟| 丁香婷婷激情网| 国产玉足脚交久久欧美|