91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scratch克隆體技術介紹

發布時間:2020-05-26 20:45:35 來源:億速云 閱讀:983 作者:鴿子 欄目:開發技術

一、引言

克隆技術是時下熱門的Scratch少兒編程考試或者競賽必須面對的重點與難點之一。本文試圖從較高的層面探討Scratch編程中克隆技術的本質,并進一步把克隆技術的應用劃分為兩大類型——共享數據克隆體和非共享數據克隆體,最后給出各自的應用舉例。

對于初、高中對面向對象編程概念沒有基礎的小朋友,可以略過本注釋的閱讀轉而進行第二小節的閱讀。熟悉其他高級編程語言的朋友都了解面向對象編程,其三種特征(封裝、繼承與多態)都在Scratch中得到非常自然與形象的體現。在此暫不贅述,有興趣的朋友可多多聯系這些概念,從而更有助于理解Scratch中的克隆技術。

二、 Scratch中克隆體可分為兩種類型

編程中,當需要大量相似的精靈完成相似的任務時,建議主動考慮使用克隆技術。其實,通過大量應用克隆技術的案例分析后,總體歸納一下,克隆體不外乎如下兩大種類型:


  • 【共享數據克隆體】這種克隆體允許其他克隆體或母體精靈訪問它的數據(可以是任何信息,如生命值、X位置、Y位置等)。
  • 【非共享數據克隆體】如果一個克隆體的數據不需要被除自身以外的任何其他角色訪問,稱此種克隆體為"非共享數據克隆體"。

在以后的文章中我會通過全面的應用實例來展示這里的結論。在本篇中,我們僅通過典型的小例來說明問題。

三、非共享數據克隆體舉例

這種類型的克隆體不需要共享信息,因此這種情況下問題比較簡單。

情形1:根據指定順序生成克隆體對象

制作非共享數據克隆體的一種方法是根據創建克隆體的順序為每個克隆體指定一個標識號。且看下面的舉例運行時截圖。

1、快照
Scratch克隆體技術介紹

設計想法是:當游戲開始時(點擊綠色小旗子),母體(黃頭貓)生成自己的三個克隆體,并在不同位置顯示;然后各自發言。造型設計如下:

Scratch克隆體技術介紹

下面,我們來看相應的編程實現。
2、編程分析
首先,需要定義以下變量:


  • 標記每一個克隆體ID的局部變量,在本文中稱為“lvID”(“lv”含義:Local Variable,即局部變量)。
  • 標記克隆體任何屬性名稱的局部變量,如位置、速度等,本例中省略。

先來看母體代碼:

Scratch克隆體技術介紹

如前所述,當點擊綠色小旗開始程序執行時,母體生成三個克隆體。

【問題】為什么上面的變量定義為局部變量?其實,看過我前面文章( https://blog.51cto.com/zhuxianzhong/2473873 Scratch高級編程之妙用變量管理母體與克隆體 )的朋友都可能理解了在克隆體編程中局部變量與全局變量在克隆體編程中的奇妙作用。稍后的代碼中還會說明這一點。
接下來,我們分別為每個克隆對象啟動下面腳本(積木【當作為克隆體運行時】的作用):

Scratch克隆體技術介紹

大家先略過代碼【說(你好)】這一句,往下看。意思是:根據變量lvID的當前值,克隆體切換成不同的對應造型并修改自身其他屬性。


【問題】如果有需要所有的克隆體立即都要做的事情,怎么辦?


【方法一】如上面代碼所示,可以在條件語句之前放置相應的命令塊(此處只有一句問好)。

【方法二】或者說是更推薦的做法是,將這些命令塊放在另一個“當作為克隆體啟動時”中。
Scratch克隆體技術介紹

【小結】至此,我們實現了既定目標:根據指定順序生成克隆體對象。

接下來,我們來簡單介紹一下局部變量與全局變量在克隆體編程中的區別。這里只使用代碼展示一下:
首先,在母體角色(黃頭貓)引入一個全局類型變量“gv克隆體計數器”。簡單修改一下母體代碼如下:

Scratch克隆體技術介紹

意思暫時不用解釋了。接下來,添加如下代碼:
Scratch克隆體技術介紹

我們想點擊每一只貓時讓它說出對應的數據,顯然觸發器“當作為克隆體啟動時”中的代碼塊只有克隆體執行,而其他地方的代碼母體與克隆體都要執行。因此,上面的代碼是母體與克隆體都要執行的。
執行結果截圖如下:
Scratch克隆體技術介紹

綠貓一開始說出自己的“lvID”值,稍后說出全局變量“gv克隆體計數器”的值,如下圖:

Scratch克隆體技術介紹

點小紅貓,顯示如下:
Scratch克隆體技術介紹
其他省略......

熟悉面向對象編程的朋友,如果結合變量(也稱作“屬性”)的繼承來理解這里公有變量與私有變量區別的話,相對更容易一些。

情形2:基于多種屬性制作克隆體

在更多情況下,例如在開發炮塔類游戲的情況下,方向、造型及其他屬性的組合非常之多,簡直數不勝數。在這種情況下,典型的方法是將這些屬性(方向、造型等)直接定義為一些全局變量——這些變量不屬于某一種角色,從而使得各種游戲角色(包括各種角色的克隆體)都可以操作這些變量。雖然這樣的方案(定義很多的全局變量)也帶來整體數據管理的復雜性,但這種辦法也確實是由軟件本身的復雜性和Scratch的局限性不得已而確定的。
接下來的代碼片斷中,我們只作部分關鍵代碼的展示,在以后的文章中我還會開發出完整的小游戲來展示這些技術的應用。下面是一個簡單的空戰小游戲的截圖(尚不完善,所以只給出與本文主題直接相關的代碼分析)。
簡單快照
Scratch克隆體技術介紹

當然,實際空戰游戲中,會有我方與敵方的許多戰機(以及類型),子彈或者炮彈數量及類型更可能是很多種且數量更大。
數據結構定義

基于上面分析,我們需要針對子彈的多種屬性創建許多全局變量(而不是局部于子彈角色的局部變量!)。在本例中,將使用以下定義:


  • “gv子彈類型”用于區分玩家(我方)的子彈和對手的子彈
  • “gv子彈X坐標”和“子彈Y坐標”表示子彈的起始位置
  • “gv子彈移動方向”表示子彈的移動方向

關鍵代碼一
每當想讓我方戰機角色開始射擊時,可以把下面腳本放在某個觸發器中(比如在按下空格鍵之后,或者某種情況下):
Scratch克隆體技術介紹

再看子彈角色造型設計:
Scratch克隆體技術介紹

當然,為了簡化問題,我們只設計了兩種造型:一種是我方子彈,一種是敵方子彈。
關鍵代碼二

相應于上面的代碼,作為子彈角色,典型的克隆體執行代碼設計可能是:
Scratch克隆體技術介紹

至此,我們給出非共享數據克隆體w使用的第二種更典型的情形分析。

接下來,我們來看相對復雜的共享數據克隆體應用的情況。

四、共享數據克隆體舉例

如前所述,本節中討論的“共享數據克隆體”是指其他精靈(包括母體精靈)或克隆體需要訪問當前克隆體的私有數據,例如它的位置、造型名稱與編號等。
這里提供一種通用技巧就是,將克隆體的各私有數據存儲在若干個對應的全局列表中,從而實現其他精靈可以訪問特定克隆體的特定數據(屬性值)。
因為本處的例子也是小例,但是為了有助于后面理解,先上運行時快照的第一個。
Scratch克隆體技術介紹

注意:本例中,母體是老黃貓!

(一)數據結構定義

要創建共享數據類型的克隆體,需要以下數據結構:


  • 一個叫做“gv克隆體計數器”的全局變量:這是一個計數器變量,用于統計創建的克隆體個數。
  • 一個叫做“lv克隆體編號”的局部變量:用于克隆識別自己。
  • “gv造型名稱列表”:這是一個存儲克隆體共享屬性的全局類型列表變量。在本例中,我們只定義這一個全局列表,用于(母體或者其他角色或者本克隆體的其他克隆體兄弟角色)跟蹤克隆體的造型信息。

(二)母體角色代碼一

Scratch克隆體技術介紹

本代碼實現了三點主要功能:
(1)母貓站在舞臺左上角(說出自己的身份),兩個全局變量初始化
(2)通過執行4次的循環,創建4個克隆體,并初始化一個(這里只有一個!)全局列表變量
(3)還原母體造型(因為經過循環中的不斷切換造型的克隆操作后,母體造型有所改變)


【問題1】為什么這里造型名稱列表內容是空的?
【問題2】私有變量“lv克隆體編號”為什么沒有在這里露頭?


(三)克隆體執行代碼

Scratch克隆體技術介紹

含義:每只小貓變得小些;私有變量“lv克隆體編號”在此出現,用于存儲當前克隆個體編號(這個編號正在存儲在產生本個體時的全局變量中)。然后,調整一下自身位置,并報出自己的個體編號。最后一句比較關鍵:把當前克隆體造型名稱存儲在全局列表變量中。

【思考】上述代碼中,能否把最后一句中的變量“lv克隆體編號”使用全局變量“gv克隆體計數器”代替?為什么?

(四)母體角色代碼二

Scratch克隆體技術介紹

很簡單,當點擊任何角色(包括母體)時,報出自己的造型名稱。

【問題】當點擊母體時,報出自己的造型名稱是否正確?根據Scratch支持特征,盡管母體中仍然可以訪問私有變量“lv克隆體編號”的值,但是其含義已經“歪曲”了!請認真思考。當然,有“面向對象編程”概念基礎的朋友,是不難理解這個問題的。

(五)母體角色代碼三、四

Scratch克隆體技術介紹

由上面第三段代碼知,我們的設計目的是:當用戶按下空格鍵時,讓2號小貓思考“媽媽在哪?”這個問題,并通過Scratch消息廣播技術尋找媽媽。
在第四段代碼中,媽媽接收消息時,報出自己的身份。

乍看起來有點復雜,但是結合我前面發的兩篇克隆文章并結合本文前面的介紹,在真正理解了全局變量與私有(也稱“局部”)變量在克隆技術中的特殊用法后,上面的問題肯定會豁然開朗。有關截圖如下:

小貓思考:
Scratch克隆體技術介紹
貓媽媽回應:
Scratch克隆體技術介紹

其實,我們還可以將兩種克隆體結合起來使用,在共享數據的同時創建不同類別的克隆體,從而創建功能更強大的游戲、創新創意小程序……

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

布尔津县| 友谊县| 孝昌县| 江永县| 元朗区| 正蓝旗| 习水县| 阿克陶县| 马边| 宝兴县| 谢通门县| 桃园市| 呼图壁县| 韩城市| 纳雍县| 平顶山市| 启东市| 阿拉善右旗| 武邑县| 景谷| 卫辉市| 教育| 株洲市| 伽师县| 高青县| 海丰县| 定结县| 策勒县| 旬邑县| 通道| 遵化市| 大名县| 大庆市| 满洲里市| 乾安县| 屯留县| 宁安市| 浙江省| 逊克县| 冕宁县| 西峡县|