資訊內容
Scratch編程之飛機大戰
Part 1 開始scratch編程
首先,我們需要一個編寫Scratch的工作環境,可以選擇在線開發或者下載離線IDE工具
-
在線開發環境:https://scratch.mit.edu/projects/editor/?tutorial=getStarted
-
下載離線工具:https://scratch.mit.edu/download
下載離線工具時請選擇對應的操作系統版本
選擇操作系統版本和下載
下載后正常安裝軟件即可。
打開在線開發環境或打開離線工具進入編程主界面
開發界面介紹
試著做一個小功能
-
從左側的積木中找到“事件”中的“當旗子被點擊”,拖動到中央空白處
-
從左側的積木中找到“運動”中的“移動10步”,拖動到中央空白處,將數字10改成100
-
將兩個積木組合到一起,如下圖
組合兩個積木
點擊右上方的綠色旗子
點擊旗子開始執行
屏幕中的小貓朝著面對的方向移動了100步
小貓移動了100步
雖然很多積木你還不了解怎么用,但Scratch的基本操作你已經掌握了。隨著深入的學習,你可以了解更多的積木的用途,從而搭建出更復雜的程序。
Part 2 背景和角色
2.1 背景
2.1.1 選擇預設背景圖片
首先,我們需要為項目添加背景。游戲的故事背景,呃…是在宇宙中吧,那么我們可以自己選擇一張喜歡的宇宙背景或者是工具中預設的背景。此處我選擇了工具中預設的Stars背景 鼠標移動到右下角的選擇背景按鈕上,點擊“選擇一個背景”
選擇預設背景
在打開的窗口中選擇喜歡的背景,此處我們選擇“Stars”
選擇了Stars背景
可以看到小貓所處的背景已經更改為Stars的效果
背景更換效果
2.1.2 上傳自定義背景
點擊“上傳背景”,上傳自己喜歡的圖片作為背景
上傳背景
這是上傳背景的效果
上傳背景效果
2.1.3 刪除不使用的背景
右下側“舞臺”可以管理所有已設置的背景。點擊當前背景(下圖中的“背景3”)
點擊舞臺背景
整個工具編程了背景設置界面。此時點擊下圖上方的選項卡可以在“代碼”,“背景”和“聲音”之間切換 左側紅框內是已經設置好的三個背景,分別是“預設的空白背景”,“Stars”和“上傳背景”。可以點擊左側背景小圖標上的x進行刪除。
界面變化
此處我們刪除背景1(預設的空白背景)和背景3(本地上傳的背景),只保留我們需要的Stars背景
刪除多余的背景
現在我們完成了背景的設置
2.2 角色
2.2.1 刪除預設角色
此時點擊右下方工作區的小貓(角色1),點擊x刪除小貓角色
刪除預設的小貓角色
2.2.2 添加預設角色
點擊右下方的角色按鈕可以添加系統中的預設角色
選擇角色選擇喜歡角色
我們此時不需要使用預設角色,可以點擊左上的“返回”回到編程頁面
2.2.3 上傳角色
點擊“上傳角色”從本地計算機中上傳繪制好的角色圖片。本小節結尾處有資源鏈接
上傳角色
我們上傳了資源“craft_player.png”,效果如下。
新的角色
可以看到資源在整個背景下非常大,方向是朝向右側。通過調整上圖紅框的“大小”和“方向”來更改飛機的顯示大小和朝向。使用鼠標拖動屏幕的飛機可以更改飛機的位置
調整后的效果
最后我們依次上傳其他角色并調整大小和方向
上傳所有角色并調整
背景和角色我們設置完成
角色圖片資源請訪問百度網盤 鏈接: https://pan.baidu.com/s/1YDEM-yr4wqriEuoOY9BwRw 提取碼: fmw9
Part 3 坐標,事件及運動
本小節主要是添加家控制的飛機角色(craft_player)的相關動作和時間 選中角色craft_player,我們需要將它控制在屏幕底部,并且可以在按下←鍵和→鍵時可以在底部左右移動
坐標
首先,我們需要確定整個屏幕的坐標,scratch設置屏幕中心為坐標原點(0,0),x軸正向為右,y軸正向為上,具體見下圖。
坐標系
如果我們想讓craft_player在屏幕底部,通過設置合適的坐標即可
設置craft_player在屏幕下方中間
初始事件
在craft_player的代碼選項卡中添加“事件”積木
初始事件積木
我們希望當游戲開始時,craft_player能在屏幕的底部中央,剛才已經得出坐標應該是(0,-150) 所以我們希望當初始事件執行時,我們的飛機在那里,通過在運動中找到如下兩個積木,這兩個積木的主要作用是設置craft_player的坐標位置。
設置坐標位置積木
我們此時將craft_player的x坐標設置為0,y坐標設置為-150,并與初始事件積木組合到一起
積木組合
這個“事件”積木表示當按下鍵盤上的某個按鍵時發生的事件
按鍵積木
此處我們將其改為按下←鍵觸發
按下←鍵觸發事件
找到“動作”中”將x坐標增加”的積木
增加x坐標積木
將它與按下←鍵的積木組合到一起,并調整數值,當按下←鍵時,x坐標是一直減少的,所以將積木中的數值設為-10。
組合積木
此時點擊綠旗子開始,按下←鍵會發現craft_player可以一直向左 同理,按下→鍵的功能類似,只不過是需要增加x坐標
組合積木
整體代碼,此處無法上傳動圖顯示效果,可以點擊←鍵和→鍵控制飛機在底部移動。
完工效果
Part 4 循環控制和顯示隱藏
接下來我們進行craft_player發射單個子彈的操作 首先選擇角色“bullet_player”
選擇bullet_player角色
在中間空白處開始編程,當游戲開始時讓子彈在craft_player角色的機頭位置出現。選擇初始事件積木
初始事件積木
選擇“運動”分類中的“移到隨機位置”積木
移動位置積木
選擇為“移到craft_player”位置
移動位置積木
將兩塊積木組合至一起
積木組合
點擊綠旗子開始后,顯示效果如下
顯示效果
bullet_player(子彈)與craft_player(飛機)位置重疊,我們需要調整bullet_player的坐標,使其向上移動,根據上一小節坐標的描述和實際情況我們調整如下
調整子彈在玩家y坐標上方30的位置
這樣子彈就在飛機的上方出現
實際效果
接下來讓子彈動起來,子彈每隔一小段時間應該繼續向上移動。此處我們使用“重復執行”控制,讓子彈不斷的去調整自己的y坐標,直至屏幕頂部。
重復執行調整子彈y坐標
實際效果(無法以動圖方式演示),注意下圖紅框內子彈已發射至屏幕頂部
子彈發射至頂部
此處可以選擇有條件的重復執行,當子彈坐標高于180時隱藏子彈 首先找到“運算”中的“大于”比較
大于比較
在“運動”中找到“y坐標”
y坐標
組合積木并調整為“y坐標>180”
組合積木調整比較內容
在“控制”中找到“重復執行直到”積木
有條件重復執行
組合“重復執行”和“y坐標>180”積木
組合積木
替換之前的無條件重復的積木,最終積木組成如下
組合積木
在,事件開始時添加“外觀”中的“顯示”,在結尾添加“外觀”中的“隱藏”
完整實現
現在我們完成了單個子彈發射的功能
Part 5 克隆體
上一小節我們講了如何發射一顆bullet_player(子彈),本小節我們利用克隆功能完成子彈的自動發射功能 首先點擊craft_player角色,查看代碼。找到“控制”中的“克隆”積木。這個積木的作用是復制某個角色。
克隆積木
子彈是一直發射的,所以我們找到“控制”中的“重復執行”積木,并將兩者結合,調整“克隆”積木為“克隆bullet_player”,如下圖
組合積木
將這部分積木與原有的積木組合
組合積木
點擊綠旗子執行的效果如下
執行效果
可見子彈生成的間隔太短,所以很密集。調整“重復執行”中的代碼,讓子彈的生成有一定的間隔,找到“控制”中的“等待x秒”積木,調整數值,組合積木如下
組合積木執行效果
但現在有個問題,移動飛機后,發現子彈沒有移動
執行效果
原因在于bullet_player中的代碼,是當“綠旗子”觸發時,才執行一系列操作,飛機移動時,克隆的子彈并沒有隨著飛機移動。
原積木組合
原因找到了,主要是觸發的事件不正確,在craft_player(飛機)角色中我們不斷的克隆了bullet_player(子彈),所以子彈中應該以“當作為克隆體啟動”事件觸發,我們將觸發“事件”由“初始事件”改為“當作為克隆體啟動”。同時當子彈隱藏時,將克隆體(自身)刪掉 如下圖
新積木組合
可以看到執行效果,子彈可以隨著飛機移動生成了
執行效果
Part 6 廣播
接下來,這個小節我們介紹如何生成敵機 利用之前所學的知識,我們可以很容易的生成敵機 選擇craft_enemy(敵機)角色,先點擊“隱藏”,將角色本體隱藏。
隱藏敵機本體
同理,bullet_enemy也可以以此方式隱藏
在craft_enemy(敵機)的編程區域完成積木組合,當“初始事件”開始后,“重復執行”,每隔3秒“克隆自己” 積木組合如下:
積木組合
接下來,當敵機作為克隆體出現時,我們需要控制它在隨機位置的頂部出現,出現后每隔一段時間向下飛行一段距離,直至到達底部,完整積木組合如下
完整地積木組合
上述積木組合用之前小節所學的知識完全可以自行實現。
Part 7 變量
如果按照之前的發射玩家子彈的方式編寫,是不可行的,因為玩家控制的飛機(craft_player)在整個屏幕中只有一個,而敵機(craft_enemy)是克隆體,在屏幕中可能同時出現多個。解決辦法是我們通過敵機克隆體發射子彈時向一個公共變量賦值,敵機子彈(bullet_enemy)的克隆體通過訪問公共變量進行初始化 首先我們在“變量”中“建立一個變量”,名字是ex
新建變量
這個時候可以看到下面有兩個選項
-
適用于所有角色:這個變量存儲的數字可以在不同角色間訪問,用于傳遞數據。
-
適用于當前角色:這個變量只限當前角色,不能在角色間共享。可以理解為它們分別是“全局變量”和“局部變量” 同時我們也建立“全局變量”ey,這樣通過兩個“全局變量”ex和ey將敵機(craft_enemy)發射子彈瞬間的坐標記錄,讓敵機子彈克隆體(bullet_enemy)去訪問坐標完成自己初始化的操作 建立變量ex和ey
在敵機的移動邏輯中添加生成子彈的積木,敵機(craft_enemy)角色修改后的全部內容如下
敵機角色craft_enemy完整積木
設置敵機子彈(bullet_enemy)角色的全部內容如下
敵機子彈bullet_enemy完整積木
實際運行結果如下,可以看到敵機的子彈非常密集
運行效果
這是主要由于移動和生成子彈的間隔都是0.05秒
問題原因
解決這個的辦法是,我們可以利用一個計數器變量,再“重復執行”中進行累加,即每隔0.05秒計數+1,當到達20的倍數時,我們再執行克隆子彈的操作,0.05×20 = 1秒,也就是說子彈可以每隔1秒才發射一次,但移動還是每隔0.05秒進行移動簡歷一個“局部變量”用于計數器,名字是count
計數器變量
調整敵機(craft_enemy)角色的積木如下
調整后的敵機角色積木組成
運行效果
敵機發射子彈的時間間隔變長
至此,敵機的生成和子彈發射全部完成
Part 8 偵測和邏輯組合
我們希望當子彈碰到敵機時,敵機毀滅。這個時候我們需要檢測當我們子彈在飛行時,是否碰到了敵機。此時我們需要在bullet_player(子彈)的飛行過程中進行檢測 此時我們可以認為某個子彈在以下兩種情況下會消失
-
沒有碰到敵機,飛出邊界。這部分功能我們已經實現了
-
碰到敵機,敵機毀滅,子彈消失。兩者滿足其一即可,此時我們需要進行邏輯判斷
與,或和非是編程中最重要的三個個邏輯
-
與:( 條件A 與 條件B )表示兩個條件必須同時滿足
-
或:( 條件A 或 條件B )表示兩個條件滿足其一即可
-
非:( 非條件A)表示與條件A相反
體現在積木中是“運算”中的如下三個積木
與,或和非
此時,子彈(bullet_player)角色在飛行中的重復執行條件需要進行更改 原來的積木組合如下
原有積木組合
此時需要多加一個“或”條件,更改如下
添加”或”條件
另一個條件是子彈(bullet_player)角色碰到了敵機(craft_enemy)角色。在“偵測”積木分類中可以找到“碰到xxx”積木
碰撞檢測積木
選擇后組裝積木得到積木組合如下
bullet_player組合
運行效果
子彈碰到敵機不會穿過
同理,將敵機子彈(bullet_enemy)角色修改當碰到飛機(craft_player)時也消失
敵機子彈(bullet_enemy)完整積木組合
Part 9 外觀控制
當敵機(craft_enemy)被子彈擊中時,應該觸發銷毀效果。我們首先需要做的是,為敵機設置一個局部變量表示生命值(health),當敵機被子彈擊中后減少它的生命值,直至生命值為0停止繼續飛行并銷毀敵機 利用之前小節提到的變量聲明使用,碰撞檢測和邏輯條件組合,修改敵機(craft_enemy)的積木如下
敵機craft_enemy的代碼
上傳敵機毀滅的造型
造型窗口
選擇資源文件上傳
image.png
添加代碼當敵機生命值為0時,產生旋渦特效并切換為毀滅狀態。每個0.02秒敵機模型旋轉15,執行4次后切換為毀滅狀態,停留0.3秒后消失
切換特效
完整敵機代碼如下
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
