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