資訊內容
淺談Scratch的舞臺刷新機制 Part 3——隱藏對象與加速模式
“?順序結構的代碼,在執行過程中,都不會刷新舞臺,只有在執行完最后一塊積木后,才會進行刷新;而循環結構的代碼,每一輪循環都會刷新一次舞臺,如循環結構中角色的旋轉效果,每執行完一次右轉的代碼,當輪循環結束,舞臺刷新一次,如此我們就會看到角色旋轉的過程了。循環結構不能單獨存在,循環結構中必然包含順序結構,所以本質還是順序結構執行完后對舞臺進行刷新。”
在《淺談Scratch的舞臺刷新機制 Part 1——自制積木的不刷新屏幕功能》一文中,介紹了“運行時不刷新屏幕”功能的原理及其應用;在《淺談Scratch的舞臺刷新機制 Part 2——在常規積木中的應用》介紹了順序結構的代碼和循環結構代碼對于舞臺刷新的處理,以及Scratch中阻塞狀態的本質。本文將會介紹Scratch中隱藏對象的舞臺刷新方式與加速模式。
01
情景復現
通過之前兩篇文章,對于在不同情況下舞臺的刷新機制都已經有了一定的了解。但是還有一種情況我們尚未討論。舞臺刷新的目的是為了讓用戶觀察到程序運行的效果及其過程,試想一下,如果一個角色本身就是看不見的,那舞臺還需要去大費周章地刷新嗎?先來看一個實例
代碼:
可見的角色在緩慢移動的過程中先隱藏再顯示
小貓“閃現”
角色在顯示狀態下,執行循環結構中的移動代碼時,不斷刷新屏幕,因此可以看到角色移動的過程,且移動速度較緩慢。角色切換至隱藏狀態后,同樣的代碼瞬間就執行完畢,造成瞬移、閃現的效果。結合《淺談Scratch的舞臺刷新機制 Part 2——在常規積木中的應用》中關于舞臺重繪需要消耗時間的說法,可以推測,角色之所以閃現、代碼之所以執行效率如此之高,是因為免去了舞臺刷新的步驟,也就是說,隱藏的角色是不會刷新舞臺的。
02
應用
這個特性的發現具體有什么用呢?可以加快局部對象的程序執行效率,使用起來比“運行時不刷新屏幕”功能更方便一些,且不局限于角色。以2.0中的冒泡排序為例。
代碼:
主程序,插入20個隨機數,等待空格按下開始排序,并計時
冒泡排序
運行過程:
排序過程
運行結果:
對20個數字進行排序用時6.396秒
由于列表顯示器位于舞臺中,在2.0中也需要通過舞臺的刷新來展示其變化,所以
在函數Buble Sort中,在開頭加上【隱藏列表】,在末尾加上【顯示列表】
對20個數字進行排序時,隱藏列表,用時0秒
自信地將樣本容量擴大,嘗試對100個數進行排序。
100個數字的冒泡排序依然在非常短的時間內完成,而在列表不隱藏時對100個數進行排序,耗時將達到40秒左右。看來舞臺刷新消耗的計算機資源還真不小。
本案例使用2.0進行測試的原因是,3.0中即使列表處于顯示狀態,也不會刷新舞臺,無論顯示還是隱藏,對1000個數進行冒泡排序的耗時都在3~5秒這個量級。所以在2.0的項目中,可以通過將列表隱藏來加快和列表相關代碼的執行效率。
03
加速模式
加速模式可以通過工具欄開啟/關閉,也可以通過SHIFT+鼠標左鍵單擊綠旗按鈕來開啟。
代碼:
通過變量count計算循環次數,數值變化越快表明程序運行速度越快
加速模式效果
開啟加速模式后count數值飛快增長
加速模式開啟后可以大幅加快程序運行效率,結合之前不刷新屏幕相關效果,我對于加速模式的推論是:如果是完全的不刷新屏幕,我們是無法看到角色移動的,而在加速模式下也能看到角色移動,只不過是以瞬間移動的形式,所以加速模式的本質是減少屏幕刷新次數,從原先的每1輪循環都刷新1次屏幕,加速至比如每100輪循環才刷新1次屏幕。這部分內容僅僅是推論,有待商榷。
04
加速模式的應用
加速模式可以應用在一些計算量特別大的案例中,以《蒙特卡羅方法》為例。
蒙特卡羅方法(Monte Carlo method),也稱統計模擬方法,是二十世紀四十年代中期由于科學技術的發展和電子計算機的發明,而被提出的一種以概率統計理論為指導的一類非常重要的數值計算方法。是指使用隨機數(或更常見的偽隨機數)來解決很多計算問題的方法。與它對應的是確定性算法。蒙特·卡羅方法在金融工程學,宏觀經濟學,計算物理學(如粒子輸運計算、量子熱力學計算、空氣動力學計算)等領域應用廣泛。
在本案例中用來計算圓周率。通過往一定范圍內進行大量地隨機投點(這個范圍是圓的外接正方形),統計落在圓的范圍內的點數,來計算出圓周率的近似值。由于投放數量十分龐大,所以需要使用加速模式。
在加速模式下利用蒙特卡羅方法進行10萬次投點實驗,落在圓內的數量為77480,圓周率近似值為3.0992
盡管這種統計模擬方法計算圓周率精度較低,但是其蘊含的思想還是值得品鑒的。
至此,Scratch中關于的舞臺刷新機制的剖析告一段落。希望本文也能“刷新”各位Scratchers的認知,起到一定的幫助。如果對于舞臺刷新機制你也有相同或者不同的見解,歡迎在Scratch格物堂留言。
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
