第 5 章 瓢蟲(chóng)快跑

2018-02-24 15:51 更新

游戲是移動(dòng)應(yīng)用中最令人興奮的部分,無(wú)論是玩游戲,還是做游戲。最近紅極一時(shí)“憤怒的小鳥(niǎo)”,根據(jù)開(kāi)發(fā)者Rovio公司稱,第一年下載量達(dá)50萬(wàn)次,同時(shí)每天運(yùn)行的人時(shí)數(shù)超過(guò)一百萬(wàn)小時(shí)。(甚至有人說(shuō)要把它拍成故事片?。┪覀兛蔁o(wú)法保證電影的成功,但可以讓您用App Inventor創(chuàng)建自己的游戲“瓢蟲(chóng)快跑”,里面的瓢蟲(chóng)要吃蚜蟲(chóng),同時(shí)要避免被青蛙吃掉。

{%}

應(yīng)用描述

如圖5-1所示的“瓢蟲(chóng)快跑”應(yīng)用,用戶可以:

  • 通過(guò)傾斜設(shè)備來(lái)控制瓢蟲(chóng)移動(dòng);

  • 查看屏幕上的能量指示條,能量會(huì)隨時(shí)間減少,并引起瓢蟲(chóng)的饑餓;

  • 讓瓢蟲(chóng)追逐并吃掉蚜蟲(chóng)來(lái)獲得能量,抵御饑餓;

  • 幫助瓢蟲(chóng)躲避青蛙,因?yàn)榍嗤艹云跋x(chóng)。

{%}

圖 5-1 瓢蟲(chóng)快跑游戲手機(jī)截屏

學(xué)習(xí)要點(diǎn)

在開(kāi)始探索本章之前,我們假設(shè)你已經(jīng)完成了第3章MoleMash的學(xué)習(xí),并熟悉了過(guò)程創(chuàng)建、隨機(jī)數(shù)生成、Ifelse塊以及ImageSprite、Canvas、Sound和Clock組件。

本章在復(fù)習(xí)MoleMash以及前幾章內(nèi)容的基礎(chǔ)上,主要介紹以下內(nèi)容:

  • 使用多個(gè)ImageSprite組件,并檢測(cè)它們之間的碰撞;

  • 使用OrientationSensor(方向傳感器)組件檢測(cè)設(shè)備的傾斜,并用它來(lái)控制ImageSprite;

  • 改變ImageSprite的顯示圖片;

  • 在Canvas組件上畫(huà)線;

  • 用Clock組件控制多個(gè)事件;

  • 用變量來(lái)記錄數(shù)值(瓢蟲(chóng)的能量水平);

  • 創(chuàng)建和使用帶參數(shù)的過(guò)程;

  • 使用and塊。

設(shè)計(jì)組件

在應(yīng)用中,使用一個(gè)Canvas組件作為三個(gè)ImageSprite組件的活動(dòng)場(chǎng)地,三個(gè)ImageSprite組件分別代表瓢蟲(chóng)、蚜蟲(chóng)和青蛙,此外,還要為青蛙配一個(gè)聲音組件。OrientationSensor(方向傳感器)通過(guò)測(cè)量設(shè)備的傾斜來(lái)移動(dòng)瓢蟲(chóng),Clock組件用來(lái)改變蚜蟲(chóng)的運(yùn)動(dòng)方向。另有一個(gè)顯示瓢蟲(chóng)能量水平的Canvas組件;一個(gè)重新啟動(dòng)按鈕,當(dāng)瓢蟲(chóng)餓死或被吃掉時(shí),用來(lái)重新啟動(dòng)游戲。表5-1提供了本應(yīng)用中使用的全部組件列表。

表5-1 瓢蟲(chóng)快跑游戲中的所有組件

組件類型 面板中分組 命名 作用
Canvas Drawing and Amination FieldCanvas 運(yùn)動(dòng)場(chǎng)地
ImageSprite Drawing and Amination Ladybug 用戶控制的角色
OrientationSensor Sensor OrientationSensor1 測(cè)試手機(jī)的傾斜,控制瓢蟲(chóng)移動(dòng)
Clock User Interface Clock1 決定何時(shí)改變Imagesprite的方向
ImageSprite Drawing and Amination Aphid 蚜蟲(chóng):瓢蟲(chóng)的捕食對(duì)象
ImageSprite Drawing and Amination Frog 青蛙:瓢蟲(chóng)的捕食者
Canvas Drawing and Amination EnergyCanvas 顯示瓢蟲(chóng)的能量水平
Button User Interface RestartButton 重啟游戲
Sound Media Sound1 青蛙吃瓢蟲(chóng)時(shí)發(fā)出的聲音

準(zhǔn)備開(kāi)始

下載瓢蟲(chóng)、蚜蟲(chóng)、死瓢蟲(chóng)及青蛙的圖像,此外還有青蛙的聲音文件。

登陸App Inventor網(wǎng)站,建一個(gè)名為“LadybugChase”新項(xiàng)目,屏幕標(biāo)題設(shè)置為“瓢蟲(chóng)快跑”。打開(kāi)塊編輯器并連接到測(cè)試設(shè)備,將下載的圖片及聲音文件上載(Upload file)到媒體面板。

如果使用設(shè)備而不是模擬器,你需要禁用“屏幕自動(dòng)旋轉(zhuǎn)”功能,否則當(dāng)設(shè)備旋轉(zhuǎn)時(shí),會(huì)改變?cè)O(shè)備的顯示方向。在大多數(shù)設(shè)備上,可以點(diǎn)擊設(shè)置->顯示,然后取消選中的“屏幕自動(dòng)旋轉(zhuǎn)”復(fù)選框即可。

活動(dòng)的瓢蟲(chóng)

在這個(gè)“第一人稱”的游戲中,瓢蟲(chóng)代表玩家,玩家通過(guò)傾斜手機(jī)來(lái)控制瓢蟲(chóng)的運(yùn)動(dòng)。與MoleMash不同,這里玩家被帶入游戲,而不是在設(shè)備以外用手觸碰。

添加組件

在前幾章,我們一次性地創(chuàng)建了所有的組件,但這不是開(kāi)發(fā)人員的習(xí)慣做法。相反,通常每次只創(chuàng)建一部分組件,編寫(xiě)相應(yīng)的程序,并進(jìn)行測(cè)試,然后在進(jìn)入到下一部分。在本節(jié)中,我們先來(lái)創(chuàng)建瓢蟲(chóng)并控制它的運(yùn)動(dòng)。

  • 在組件設(shè)計(jì)器中創(chuàng)建一個(gè)Canvas,命名為FieldCanvas,并設(shè)置其寬度為“Fill parent”,高度為300像素;

  • 在FieldCanvas上放置一個(gè)ImageSprite,重命為L(zhǎng)adybug,并設(shè)置其Picture屬性為活的瓢蟲(chóng)圖片。不必在意它的x、y屬性,這取決于ImageSprite被放在畫(huà)布上的位置。

也許你已經(jīng)注意到,ImageSprites還有Interval、Heading以及speed屬性,而這些都是在本程序中要用到的:

  • Interval屬性:在本游戲中可以設(shè)置為10(毫秒),來(lái)設(shè)定ImageSprite自身的移動(dòng)頻率(而不是像MoleMash中那樣,運(yùn)動(dòng)被MoveTo過(guò)程所控制);

  • Heading屬性:指示ImageSprite將要移動(dòng)的方向。例如:0表示向右,90表示向上,180表示向左,等等?,F(xiàn)在就讓它取默認(rèn)值——向右,我們將在塊編輯器中改變它;

  • Speed屬性:指定ImageSprite在每個(gè)時(shí)間間隔內(nèi)移動(dòng)的距離(單位為像素)。我們將在塊編輯器中設(shè)置Speed屬性。

瓢蟲(chóng)的運(yùn)動(dòng)由OrientationSensor通過(guò)檢測(cè)設(shè)備的傾斜程度來(lái)進(jìn)行控制;Clock組件用來(lái)每隔10毫秒(每秒100次)檢測(cè)一次設(shè)備的方向,并相應(yīng)地改變瓢蟲(chóng)的Heading(方向)屬性 。我們將在塊編輯器中做如下設(shè)置:

1. 添加OrientationSensor組件,它將出現(xiàn)在“不可見(jiàn)組件”區(qū)域;

2. 添加Clock組件,它也將出現(xiàn)在“不可見(jiàn)組件”區(qū)域,并設(shè)置其TimerInterval屬性為10毫秒。對(duì)照?qǐng)D5-2檢查添加的組件。

{%}

圖 5-2 在組件設(shè)計(jì)器中為動(dòng)畫(huà)瓢蟲(chóng)設(shè)置用戶界面

添加行為

切換到塊編輯器,創(chuàng)建名為UpdateLadybug的過(guò)程(procedure)及Clock1.Timer塊,如圖5-3所示。嘗試不使用抽屜,直接輸入塊的名字(如“when Clock1.Timer”)來(lái)生成塊。(請(qǐng)注意,對(duì)數(shù)字100的乘法操作使用的是星號(hào)(*),但圖中看不到。)雖然可以單擊右鍵選擇添加注釋,但這不是必須的。

{%}

圖 5-3 每隔10毫秒改變一次瓢蟲(chóng)的方向及速度

在UpdateLadybug過(guò)程里用到了兩個(gè)OrientationSensor最有用的屬性:

  • Angle(角度):表示設(shè)備傾斜的方向;

  • Magnitude(幅度):表示設(shè)備的傾斜程度,范圍從0 (不傾斜)至1(最大傾斜)。

Magnitude乘以100是告訴瓢蟲(chóng),在每個(gè)時(shí)間間隔(TimerInterval)內(nèi),在某個(gè)特定的方向,移動(dòng)的距離在0到100像素之間。時(shí)間間隔為之前在組件設(shè)計(jì)器中設(shè)定的10毫秒。

雖然在連接設(shè)備上可以測(cè)試瓢蟲(chóng)的移動(dòng),但與打包下載到設(shè)備上的運(yùn)行效果相比,瓢蟲(chóng)的速度要么太慢,要么太快。對(duì)于安裝運(yùn)行的應(yīng)用,如果太慢,可以增加速度;相反,則減小速度。

顯示能量水平

在第二個(gè)Canvas組件上用一個(gè)紅色線條來(lái)顯示瓢蟲(chóng)的能量水平。線條高度為1個(gè)像素,寬度為瓢蟲(chóng)的能量值,取值范圍從200(健康)到0(死)。

添加組件

在組件設(shè)計(jì)器中,在FieldCanvas下方創(chuàng)建一個(gè)新的Canvas組件,命名為EnergyCanvas;設(shè)置Width屬性為“Fill parent”,Height屬性為1個(gè)像素。

創(chuàng)建變量:Energy

在塊編輯器中,創(chuàng)建一個(gè)初始值為200的變量來(lái)記錄瓢蟲(chóng)的能量水平。(還記得吧,在第2章PaintPot中,第一次使用變量dotSize)以下是具體步驟:

1. 在塊編輯器中,拖出一個(gè)initialize global name to塊,將name改為energy;

2. 如果energy塊的右側(cè)插槽內(nèi)有其他塊,刪掉它:選中并按Delete鍵或直接拖到垃圾桶;

3. 創(chuàng)建一個(gè)數(shù)組塊200(直接輸入數(shù)字200或拖動(dòng)Math抽屜中的0塊),然后插入initialize global energy to塊,如圖5-4所示。

{%}

圖 5-4 將變量energy初始化為200

圖5-5中顯示了當(dāng)鼠標(biāo)懸浮在初始化變量塊的“energy”文本上時(shí),呼出了全局變量energy的“get”及“set”塊;

{%}

圖 5-5 從初始化變量塊中獲得set及get塊

畫(huà)出能量條

我們要在變量energy與紅色線條之間建立通信,使線條長(zhǎng)度(像素)與能量值相等。為此創(chuàng)建如下兩個(gè)類似的組塊:

1. 在EnergyCanvas上從(0, 0)點(diǎn)到(energy, 0)點(diǎn)畫(huà)一條紅線,以顯示當(dāng)前的能量水平;

2. 在EnergyCanvas上從(0, 0)點(diǎn)到(EnergyCanvas.Width, 0)點(diǎn)畫(huà)一條白線,在畫(huà)新能量水平線之前,清除當(dāng)前的能量水平線。(記得前面設(shè)置EnergyCanvas.Width為“Fill parent”。)

然而,最好能創(chuàng)建一個(gè)過(guò)程,能用任何顏色在EnergyCanvas上畫(huà)任意長(zhǎng)度的線。為此,需要定義兩個(gè)參數(shù):length(長(zhǎng)度)和color(顏色),當(dāng)程序被調(diào)用時(shí),我們只需要指定參數(shù)值,就像在MoleMash一章中調(diào)用random integer內(nèi)置過(guò)程一樣。下面是創(chuàng)建DrawEnergyLine過(guò)程的步驟,如圖5-6所示。

1. 進(jìn)入Procedures抽屜,拖出一個(gè)to procedure塊;

2. 點(diǎn)擊過(guò)程名(可能是“procedure” ),改為“DrawEnergyLine”;

3. 點(diǎn)擊過(guò)程塊左上角的藍(lán)色方塊,呼出兩個(gè)塊:input及input x;

4. 將input x塊插入到input塊內(nèi),將x修改為color;

5. 重復(fù)步驟4:插入第二塊input x并命名為“l(fā)ength”;

6. 按照?qǐng)D5-6所示,為該過(guò)程添加的其余的塊:將鼠標(biāo)懸停在to DrawEnergyLine塊的參數(shù)color及l(fā)ength文本上,獲得get color及get length塊;或者從Variables抽屜中直接拖出get塊,插入到to DrawEnergyLine內(nèi)部的塊中,點(diǎn)擊下拉菜單選擇color或length。

{%}

圖 5-5a 為DrawEnergyLine過(guò)程添加輸入(參數(shù))

{%}

圖 5-6 定義過(guò)程DrawEnergyLine

現(xiàn)在,你已經(jīng)掌握了創(chuàng)建過(guò)程的竅門,讓我們?cè)賹?xiě)一個(gè)DisplayEnergy的過(guò)程,兩次調(diào)用DrawEnergyLine過(guò)程:第一次用來(lái)擦除舊線(覆蓋整個(gè)EnergyCanvas的白線),第二次用來(lái)顯示新的能量線,如圖5-7所示。

{%}

圖 5-7 定義過(guò)程DisplayEnergy

DisplayEnergy過(guò)程由以下四行命令組成:

1. 設(shè)定畫(huà)筆顏色為白色;

2. 畫(huà)一條貫穿EnergyCanvas的橫線(1個(gè)像素高);

3. 設(shè)定畫(huà)筆顏色為紅色;

4. 畫(huà)一條長(zhǎng)度等于energy值的線。

 提示:將若干行代碼規(guī)整到一個(gè)過(guò)程中,通過(guò)調(diào)用這個(gè)過(guò)程來(lái)取代逐行地執(zhí)行這些代碼,這個(gè)過(guò)程被稱作重構(gòu),這種強(qiáng)大的技術(shù)使得程序更易于維護(hù),也更可靠。在這種情況下,如果我們想改變能量線的高度或位置,我們只需對(duì)DrawEnergyLine過(guò)程做一次修改,而不必分兩次來(lái)完成這一修改。

饑餓而死

不同于前幾章的應(yīng)用,本游戲設(shè)定了結(jié)束環(huán)節(jié):如果瓢蟲(chóng)吃不到足夠的蚜蟲(chóng),或者被青蛙吃掉,則游戲結(jié)束。此時(shí)我們希望瓢蟲(chóng)不再移動(dòng)(設(shè)置Ladybug.Enabled為false),并將活瓢蟲(chóng)圖片換成死瓢蟲(chóng)(將Ladybug.Picture設(shè)置為已上傳的圖片文件名)。GameOver過(guò)程的創(chuàng)建如圖5-8所示。

{%}

圖 5-8 定義GameOver過(guò)程

再按圖5-9所示向UpdateLadybug(由Clock.Timer每10毫秒調(diào)用一次)添加紅框內(nèi)的代碼:

  • 減少瓢蟲(chóng)的能量(energy = energy - 1);

  • 顯示新的能量水平(call DisplayEnergy);

  • 如果energy值為0則游戲結(jié)束。

 測(cè)試:你可以在設(shè)備上測(cè)試這段代碼,并驗(yàn)證能量水平隨時(shí)間的減少,并最終導(dǎo)致瓢蟲(chóng)死亡。重啟應(yīng)用可以點(diǎn)擊“Reset Connection->AI Companion”。

{%}

圖 5-9 UpdateLadybug過(guò)程的第二個(gè)版本

添加蚜蟲(chóng)

下面來(lái)添加蚜蟲(chóng),即讓蚜蟲(chóng)在FieldCanvas上浮動(dòng)。如果瓢蟲(chóng)撞上蚜蟲(chóng)(視同“吃”掉它),則瓢蟲(chóng)的能量水平升高,而蚜蟲(chóng)消失,且稍后會(huì)再次出現(xiàn)。(在用戶看來(lái),這完全是另一只蚜蟲(chóng),但實(shí)際上是同一個(gè)ImageSprite組件。)

添加一個(gè)ImageSprite

添加蚜蟲(chóng)首先要回到組件設(shè)計(jì)器,創(chuàng)建另一個(gè)ImageSprite,要確保它不落在瓢蟲(chóng)上,命名為Aphid,其屬性設(shè)置如下:

1. Picture屬性:設(shè)置為已上傳的蚜蟲(chóng)圖像文件;

2. Interval屬性:設(shè)置為10,即:像瓢蟲(chóng)一樣,每10毫秒移動(dòng)一次;

3. Speed屬性:設(shè)置為2,因此蚜蟲(chóng)移動(dòng)不會(huì)太快,以便讓瓢蟲(chóng)能抓住它。

不必在意它的x、y屬性(只要不是在瓢蟲(chóng)上)或title屬性,這些可以在塊編輯器中設(shè)置。

控制蚜蟲(chóng)

實(shí)驗(yàn)發(fā)現(xiàn),蚜蟲(chóng)每隔50毫秒(Clock1跳動(dòng)5次)改變一次方向的效果最好??梢酝ㄟ^(guò)創(chuàng)建第二個(gè)Clock組件,并設(shè)定其TimerInterval屬性為50毫秒來(lái)實(shí)現(xiàn)這一效果。但是,我們希望能夠嘗試不同的技術(shù):使用random fraction(隨機(jī)分?jǐn)?shù))塊,每次調(diào)用,它都將返回一個(gè)≥0但<1的隨機(jī)數(shù)。創(chuàng)建UpdateAphid過(guò)程,并用Clock1.Timer來(lái)調(diào)用它,如圖5-10所示。

{%}

圖 5-10 添加UpdateAphid過(guò)程

塊的作用

定時(shí)器每次跳動(dòng)(每秒100次)都將調(diào)用UpdateLadybug及UpdateAphid過(guò)程。UpdateAphid過(guò)程首先生成一個(gè)介于0到1之間的隨機(jī)數(shù),例如0.15,如果該數(shù)<0.20(在20%的時(shí)間里),蚜蟲(chóng)將改變方向,改變的角度為0到360之間的隨機(jī)數(shù);如果該數(shù)≥0.20(在其余80%的時(shí)間里),蚜蟲(chóng)方向保持不變。

瓢蟲(chóng)吃掉蚜蟲(chóng)

下一步,當(dāng)他們碰撞時(shí),讓瓢蟲(chóng)“吃掉”蚜蟲(chóng)。幸運(yùn)的是,App Inventor提供了ImageSprite組件之間的碰撞檢測(cè)。問(wèn)題是:當(dāng)瓢蟲(chóng)與蚜蟲(chóng)碰撞時(shí),會(huì)發(fā)生哪些事情?在繼續(xù)閱讀之前,請(qǐng)你停下來(lái)想想這個(gè)問(wèn)題。

為了處理瓢蟲(chóng)與蚜蟲(chóng)的碰撞,創(chuàng)建EatAphid過(guò)程,其具體步驟如下:

  • 瓢蟲(chóng)的能量水平上升50,來(lái)模擬享受美食;

  • 讓蚜蟲(chóng)消失(設(shè)置其Visible屬性為false);

  • 讓蚜蟲(chóng)停止移動(dòng)(設(shè)置其Enabled屬性為false);

  • 讓蚜蟲(chóng)移動(dòng)到屏幕上任意位置(這與MoleMash中移動(dòng)地鼠遵循了相同的編碼方式)。

請(qǐng)對(duì)照?qǐng)D5-11檢查您的塊。如果你還能想到發(fā)生其他事情,比如音效,可以自行添加。

{%}

圖 5-11 創(chuàng)建EatAphid過(guò)程

塊的作用

每次調(diào)用EatAphid,變量energy增加50,緩解了瓢蟲(chóng)的饑餓。然后,蚜蟲(chóng)的Visible及Enabled屬性都被設(shè)置為false,看上去像是消失了。最后,產(chǎn)生隨機(jī)的x、y坐標(biāo),并調(diào)用Aphid.MoveTo,這樣,蚜蟲(chóng)會(huì)在一個(gè)新位置再次出現(xiàn)(否則,它一出現(xiàn)便會(huì)被立即吃掉)。

瓢蟲(chóng)與蚜蟲(chóng)之間的碰撞檢測(cè)

圖5-12顯示了在瓢蟲(chóng)與蚜蟲(chóng)之間做碰撞檢測(cè)的代碼。

{%}

圖 5-12 檢測(cè)并處理瓢蟲(chóng)與蚜蟲(chóng)之間的碰撞

塊的作用

當(dāng)瓢蟲(chóng)與另一個(gè)ImageSprite碰撞時(shí),將調(diào)用Ladybug.CollidedWith,參數(shù)“other”指向任何與瓢蟲(chóng)發(fā)生相撞的ImageSprite。此時(shí),只有蚜蟲(chóng)可以碰撞,但稍后會(huì)有青蛙加入進(jìn)來(lái)。我們采用防御性編程方式,即在調(diào)用EatAphid之前,要確認(rèn)碰撞的對(duì)象就是蚜蟲(chóng);此外還要確認(rèn)蚜蟲(chóng)可見(jiàn),否則,蚜蟲(chóng)在被吃掉之后而重新出現(xiàn)之前,還會(huì)與瓢蟲(chóng)再次碰撞。如果缺少這項(xiàng)確認(rèn),隱形的蚜蟲(chóng)會(huì)被再次吃掉,并引起能量水平的再次增加,這會(huì)讓用戶感到費(fèi)解。

{%} 測(cè)試:重新啟動(dòng)游戲,并確信瓢蟲(chóng)出現(xiàn)在一個(gè)新的任意位置。

添加音效

測(cè)試游戲時(shí),你可能注意到:當(dāng)蚜蟲(chóng)或瓢蟲(chóng)被吃掉時(shí),缺少良好的反饋。要添加音效及觸覺(jué)反饋,請(qǐng)執(zhí)行以下操作:

1. 在組件設(shè)計(jì)器中添加一個(gè)Sound組件。設(shè)置其Source屬性為已上傳的聲音文件;

2. 進(jìn)入塊編輯器,進(jìn)行如下操作:

  • 在EatAphid過(guò)程中添加Sound1.Vibrate塊,參數(shù)為100毫秒,以便在蚜蟲(chóng)被吃掉時(shí),設(shè)備產(chǎn)生振動(dòng);

  • 在Ladybug.CollidedWith中調(diào)Sound1.Play,位置在調(diào)用GameOver之前,以便當(dāng)青蛙吃掉瓢蟲(chóng)時(shí)發(fā)出叫聲。

改進(jìn)

下面這些想法目的是改進(jìn)游戲,或者讓游戲更個(gè)性化:

  • 目前,當(dāng)游戲結(jié)束時(shí),青蛙和蚜蟲(chóng)還在移動(dòng),這與其Enabled屬性有關(guān):在GameOver中將其設(shè)置為false,并在RestartButton.Click中重新設(shè)置為true;

  • 設(shè)置并顯示一個(gè)分?jǐn)?shù),來(lái)表示瓢蟲(chóng)的存活時(shí)間。你可以用Label來(lái)顯示一個(gè)數(shù)值,該數(shù)值在Clock1.Timer內(nèi)不斷遞增;

  • 將EnergyCanvas的Height屬性增加為2,以便使能量條更加明顯,并在DrawEnergyLine內(nèi)畫(huà)兩條線,一個(gè)在另一個(gè)之上。(使用一個(gè)過(guò)程,而不是復(fù)制代碼先擦除再重繪能量線,這樣做的另一個(gè)好處是:如果你需要修改線的粗細(xì)、顏色或位置時(shí),只需要修改一處的代碼。)

  • 添加背景圖和更多音效來(lái)渲染氣氛,比如用真聲或預(yù)警聲來(lái)提示瓢蟲(chóng)能量水平的降低;

  • 讓游戲隨時(shí)間推移而變得越來(lái)越難,如增加青蛙的速度,或降低Interval屬性值;

  • 從技術(shù)上來(lái)說(shuō),被青蛙吃掉的瓢蟲(chóng)應(yīng)該消失。改變游戲規(guī)則:如果瓢蟲(chóng)被吃,則隱形;如果是餓死,則顯示死瓢蟲(chóng)圖;

  • 將瓢蟲(chóng)、蚜蟲(chóng)和青蛙的圖片換成更適合你個(gè)人口味的圖片,如霍比特人、半獸人以及邪惡的巫師;或者是反叛星際戰(zhàn)斗機(jī)、能源艙及帝國(guó)戰(zhàn)機(jī)。

小結(jié)

已經(jīng)有兩個(gè)游戲被你收入囊中(假設(shè)你學(xué)習(xí)了MoleMash),現(xiàn)在你該知道如何創(chuàng)建自己的游戲了,這是許多新程序員或有志者的目標(biāo)!具體來(lái)說(shuō),您學(xué)習(xí)了:

  • 可以創(chuàng)建多個(gè)ImageSprite組件(瓢蟲(chóng),蚜蟲(chóng)和青蛙),并在它們之間做碰撞檢測(cè);

  • 用OrientationSensor可以檢測(cè)設(shè)備的傾斜,而測(cè)得的值可用于控制sprite(或你能想到的任何其他對(duì)象)的移動(dòng);

  • 一個(gè)Clock組件可以控制多個(gè)發(fā)生頻率相同(改變瓢蟲(chóng)和青蛙的方向),或通過(guò)使用random fraction塊來(lái)控制頻率不同的事件。例如,如果你想在一個(gè)周期中,有大約1/4(25%)的時(shí)間里會(huì)發(fā)生某事件,只要將它放在if塊中,并設(shè)定條件為random fraction的結(jié)果<0.25即可;

  • 一個(gè)應(yīng)用中可以使用多個(gè)Canvas組件,我們的例子中有兩個(gè),一個(gè)用于游戲場(chǎng)地,另一個(gè)用于變量的圖形化顯示(而不是用Label顯示);

  • 用戶自定義過(guò)程可以使用參數(shù)(如在DrawEnergyLine 中使用的“color”及“l(fā)ength”)來(lái)控制其行為,這極大地?cái)U(kuò)展了過(guò)程抽象的能力。

另一個(gè)游戲中常用的組件是Ball,與ImageSprite唯一不同的是,它的外觀是一個(gè)被填充的圓形,而不是一張任意的圖片。

資源下載

frog.png

ladybug.png

deadladybug.png

aphid.png

frog.wav

英漢對(duì)照

orientation: 方向

field: 場(chǎng)地

ladybug: 瓢蟲(chóng)

aphid: 蚜蟲(chóng)

frog: 青蛙

energy: 能量

restart: 重新開(kāi)始

chase: 追逐,奔跑

upload: 上載,上傳

file: 文件

interval: 間隔

heading: 前進(jìn)方向

speed: 速度

timer: 計(jì)時(shí)器

updat: 更新

angle: 角度

magnitude: 幅度

delete: 刪除

procedure: 過(guò)程

input: 輸入

display: 顯示

enable: 使有效

reset: 重置

visible: 可見(jiàn)的

eat: 吃

collide: 碰撞

with: 與...

else: 否則

fraction: 分?jǐn)?shù)

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)