自從Scratch 2.0中引入克隆技術,程序中許多任務可以通過克隆技術更為高效地執行,而不再需要創建大量的精靈??寺◇w實質上就是精靈的實例,這意味著它們繼承了精靈的屬性,但另一方面也是獨立的對象??寺◇w通??赡芤獔绦信c母體精靈稍有不同的任務,但一個關鍵的問題是:克隆體和母體精靈都對幾乎所有事件塊(觸發器)能夠做出響應。這樣一來,專門為母體精靈設計的觸發器在發出信號時也能夠由克隆體運行。
實際開發中,當需要許多相似的精靈完成相似的任務時,就應該主動考慮到使用克隆技術。因為克隆是由程序而不是用戶實現的,所以克隆的運用可以讓用戶不需要對許多精靈中的每個精靈進行相同的更改。因此,克隆技術可典型地應用于開發:
【高級應用提示】Scratch中的克隆可以使用積木命令【當作為克隆體啟動時】遞歸地克隆自身,有興趣的朋友可作這方面更深入的探討。
先來看以下簡單的代碼:
【結論一】如果單擊包含上述腳本(第二段)的母體的克隆體,則克隆體本身就會執行第二段代碼。
如果只要求母體而不是它的克隆響應上面的代碼,那么我們可以通過使用私有變量的辦法來規定哪個對象(可以是母體,也可以是子克?。┻\行哪個觸發器。【結論二】如果不使用私有變量,則所有克隆體都將共享使用同一變量。
三、使用私有變量
私有變量可以用于存儲單個母體精靈和各個克隆體的值,盡管它們具有相同的名稱。例如,三個克隆體可以有一個名為“X方向速度”的變量,但是每個克隆都可以有自己的變量值。
類似地,母體精靈可以將其私有變量設置為特定字符串,而每個克隆體都可將其設置為不同的值。類之間不同變量值的概念允許選擇母體精靈或子克隆體運行哪些代碼。
【提示】熟悉面向對象編程的朋友應該對“繼承”概念不陌生吧,父類可以派生出多種子類,而子類可以擁有與父類相似但又不同的各自特征。至此,大家應該對Scratch面向對象編程技術有更為深刻的理解了吧。
例如,我們想實現單擊綠色標志時,立即刪除所有克隆體,但母體精靈仍存在。下面,還是讓我們通過具體的小例子來說明問題。
要實現這樣的目的,首先請考慮在母體中編寫下面的代碼:
易知,保存在變量“instance”中的這一小段數據只顯示該母體精靈是一個“精靈”。注意,要實現上述目的,“instance”必須是私有變量;否則將無法工作。接下來,必須指定一個腳本,為所有克隆體分配一個顯示它們是“克隆體”的變量值。以下腳本可以完成此操作:
顯然,只有克隆體才能執行這段代碼!
上面的腳本不會更改母體精靈的變量“instance”的值。相反,每個克隆體都有自己的變量“instance”。
完成上面的兩段編程后,變量“instance”和if語句相結合,就可以正確地將觸發器指定為僅為母體精靈或其克隆體運行。
再來看下面的代碼:
上面的腳本只適用于克隆,這是顯而易見的,因為母體精靈的變量沒有設置為“clone”,母體精靈不會執行此if塊中的語句。請注意:上面這種使用“變量”的方法也是Scratch項目開發中調試克隆引起問題的非常有效的方法。
下面的示例演示如何在單個母體精靈的腳本中管理多個克隆體類型。請注意,在生成每個克隆體(或一組類似克隆體)之前,會為專用變量“type”分配一個值。如果母體精靈要忽略廣播,則應在生成克隆體后但在接收到廣播消息之前設置其自身的唯一值“type”。
注:代碼中type是私有變量。
私有變量“type”的值由每個克隆體從母體精靈繼承,而母體精靈卻會忽略接收廣播的消息,因為它自己的“type”值不同。這種技術允許許多不同的克隆體類型以各自獨特的方式工作。
本文并沒有給出復雜的完全例子,但是僅通過簡短的小例,足以說明了僅憑借變量的全局性與局部性的巧妙運用即可實現Scratch復雜開發中母體與克隆體間差異行為的有效管理。在后面的博文中,我會進一步給出Scratch復雜開發中克隆技術的其他應用注意事項,并給出更系統完整的案例,敬請期待。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。