自從Scratch 2.0中引入克隆技術,程序中許多任務能夠經過克隆技術更爲高效地執行,而再也不須要建立大量的精靈。克隆體實質上就是精靈的實例,這意味着它們繼承了精靈的屬性,但另外一方面也是獨立的對象。克隆體一般可能要執行與母體精靈稍有不一樣的任務,但一個關鍵的問題是:克隆體和母體精靈都對幾乎全部事件塊(觸發器)可以作出響應。這樣一來,專門爲母體精靈設計的觸發器在發出信號時也可以由克隆體運行。編程
實際開發中,當須要許多類似的精靈完成類似的任務時,就應該主動考慮到使用克隆技術。由於克隆是由程序而不是用戶實現的,因此克隆的運用可讓用戶不須要對許多精靈中的每一個精靈進行相同的更改。所以,克隆技術可典型地應用於開發:ide
【高級應用提示】Scratch中的克隆可使用積木命令【看成爲克隆體啓動時】遞歸地克隆自身,有興趣的朋友可做這方面更深刻的探討。設計
先來看如下簡單的代碼:調試
【結論一】若是單擊包含上述腳本(第二段)的母體的克隆體,則克隆體自己就會執行第二段代碼。
若是隻要求母體而不是它的克隆響應上面的代碼,那麼咱們能夠經過使用私有變量的辦法來規定哪一個對象(能夠是母體,也能夠是子克隆)運行哪一個觸發器。對象【結論二】若是不使用私有變量,則全部克隆體都將共享使用同一變量。blog
3、使用私有變量
私有變量能夠用於存儲單個母體精靈和各個克隆體的值,儘管它們具備相同的名稱。例如,三個克隆體能夠有一個名爲「X方向速度」的變量,可是每一個克隆均可以有本身的變量值。
相似地,母體精靈能夠將其私有變量設置爲特定字符串,而每一個克隆體均可將其設置爲不一樣的值。類之間不一樣變量值的概念容許選擇母體精靈或子克隆體運行哪些代碼。繼承
【提示】熟悉面向對象編程的朋友應該對「繼承」概念不陌生吧,父類能夠派生出多種子類,而子類能夠擁有與父類類似但又不一樣的各自特徵。至此,你們應該對Scratch面向對象編程技術有更爲深入的理解了吧。遞歸
例如,咱們想實現單擊綠色標誌時,當即刪除全部克隆體,但母體精靈仍存在。下面,仍是讓咱們經過具體的小例子來講明問題。遊戲
要實現這樣的目的,首先請考慮在母體中編寫下面的代碼:事件
易知,保存在變量「instance」中的這一小段數據只顯示該母體精靈是一個「精靈」。注意,要實現上述目的,「instance」必須是私有變量;不然將沒法工做。接下來,必須指定一個腳本,爲全部克隆體分配一個顯示它們是「克隆體」的變量值。如下腳本能夠完成此操做:
顯然,只有克隆體才能執行這段代碼!
上面的腳本不會更改母體精靈的變量「instance」的值。相反,每一個克隆體都有本身的變量「instance」。
完成上面的兩段編程後,變量「instance」和if語句相結合,就能夠正確地將觸發器指定爲僅爲母體精靈或其克隆體運行。
再來看下面的代碼:
上面的腳本只適用於克隆,這是顯而易見的,由於母體精靈的變量沒有設置爲「clone」,母體精靈不會執行此if塊中的語句。請注意:上面這種使用「變量」的方法也是Scratch項目開發中調試克隆引發問題的很是有效的方法。
下面的示例演示如何在單個母體精靈的腳本中管理多個克隆體類型。請注意,在生成每一個克隆體(或一組相似克隆體)以前,會爲專用變量「type」分配一個值。若是母體精靈要忽略廣播,則應在生成克隆體後但在接收到廣播消息以前設置其自身的惟一值「type」。
注:代碼中type是私有變量。
私有變量「type」的值由每一個克隆體從母體精靈繼承,而母體精靈卻會忽略接收廣播的消息,由於它本身的「type」值不一樣。這種技術容許許多不一樣的克隆體類型以各自獨特的方式工做。
本文並無給出複雜的徹底例子,可是僅經過簡短的小例,足以說明了僅憑藉變量的全局性與局部性的巧妙運用便可實現Scratch複雜開發中母體與克隆體間差別行爲的有效管理。在後面的博文中,我會進一步給出Scratch複雜開發中克隆技術的其餘應用注意事項,並給出更系統完整的案例,敬請期待。