資訊內(nèi)容
Scratch全國(guó)少兒編程競(jìng)賽獲獎(jiǎng)作品《記憶碎片》解析上篇
Scratch全國(guó)少兒編程競(jìng)賽
獲獎(jiǎng)作品解析《記憶碎片》
本文介紹的作品是全國(guó)青少年創(chuàng)意編程與智能設(shè)計(jì)大賽創(chuàng)意編程比賽一等獎(jiǎng)獲得者孫佳閱同學(xué)的最新參賽作品。
作品說(shuō)明暑假里,我無(wú)意中被媽媽訂閱的一期《三聯(lián)生活周刊》的主題《我把自己弄丟了》吸引了,我一口氣讀完了里面的每一篇相關(guān)文章,了解了一種我從未聽(tīng)說(shuō)過(guò)的疾病——阿爾茲海默癥。患者的世界深深震撼了我,他們的記憶在被疾病一點(diǎn)一點(diǎn)無(wú)情地吞噬,但他們?nèi)匀荒軌蚋惺艿奖А⒐陋?dú)、不安,仍然能夠感受到愛(ài)與被愛(ài)。于是,我決定以此作為作品的主題,我想通過(guò)這個(gè)作品,讓玩家走進(jìn)阿爾茲海默癥患者的內(nèi)心,呼吁整個(gè)社會(huì)對(duì)他們的關(guān)注與愛(ài)。
游戲中的變量以及作用
變量名稱(chēng) |
作用 |
---|---|
播完了? | 記錄背景音樂(lè)是否播放完 |
拼好數(shù)量 | 記錄拼好的碎片數(shù)量 |
收集數(shù)量 | 記錄收集到的碎片數(shù)量 |

今天,果凍老師繼續(xù)帶大家解析Scratch的參賽作品,這一次,我們來(lái)學(xué)習(xí)小學(xué)4-6年級(jí)組一等獎(jiǎng)獲得者孫佳閱同學(xué)的《記憶碎片》。這是一個(gè)有關(guān)阿爾茲海默癥的作品,什么是阿爾茲海默癥呢?它是一種認(rèn)知與行為功能障礙的疾病,常發(fā)生于老年人的身上,主要的表現(xiàn)就是記憶力減退,經(jīng)常將日常所做的事和常用的一些物品遺忘。在《記憶碎片》這個(gè)作品中,孫佳閱同學(xué)使我們化身一名阿爾茲海默癥患者,將記憶中殘留的物品碎片進(jìn)行拼接,重新喚起對(duì)于往事的完整記憶。這個(gè)小小的作品呼吁的是要對(duì)阿爾茲海默癥患者有更多的關(guān)注與愛(ài)心,作為每一個(gè)都會(huì)變老的人,我們應(yīng)該讓這樣的作品傳播的更遠(yuǎn)。
整個(gè)作品的基調(diào)是緩慢而溫馨的,接下來(lái)我們就一起進(jìn)入阿爾茲海默癥患者的世界。
點(diǎn)擊綠旗如同大多數(shù)的游戲作品一樣,點(diǎn)擊綠旗后并沒(méi)有立即開(kāi)始游戲,而是有一個(gè)開(kāi)始頁(yè),上面顯示了作品的名字與一個(gè)開(kāi)始按鈕。
這里帶有特效的角色有兩個(gè):游戲名稱(chēng)的文字和三角形的開(kāi)始按鈕。
當(dāng)綠旗被點(diǎn)擊后,文字與按鈕都有一個(gè)虛像漸變顯示的效果:
不同的是,按鈕的顯示有一個(gè)0.5秒的延時(shí)。
這樣,一個(gè)簡(jiǎn)單的過(guò)渡動(dòng)畫(huà)就添加好了。接下來(lái),我們就要點(diǎn)擊按鈕進(jìn)入游戲了。那如何判斷按鈕被點(diǎn)擊了呢?在Scratch的事件中有一個(gè)當(dāng)角色被點(diǎn)擊的語(yǔ)句,拖動(dòng)它到代碼區(qū)就可以簡(jiǎn)單快速的判斷角色是否被鼠標(biāo)點(diǎn)擊了。
但是作為一名參加比賽的選手,我們要自己來(lái)實(shí)現(xiàn)點(diǎn)擊判斷的代碼,這樣才會(huì)顯得與眾不同,其實(shí)代碼實(shí)現(xiàn)起來(lái)也不難,就是兩個(gè)等待語(yǔ)句:
第一個(gè)等待語(yǔ)句判斷按鈕是否碰到了鼠標(biāo)指針并且按下了鼠標(biāo),也就是我們按下了鼠標(biāo)的左鍵;第二個(gè)等待語(yǔ)句是反向判斷,它判斷第一個(gè)等待語(yǔ)句的條件是否不成立,也就是我們松開(kāi)了鼠標(biāo)的左鍵,這兩個(gè)語(yǔ)句組合在一起就實(shí)現(xiàn)了鼠標(biāo)按鍵點(diǎn)擊判斷的效果。
當(dāng)兩個(gè)等待語(yǔ)句的條件都滿足之后,就會(huì)繼續(xù)執(zhí)行下面的代碼,廣播進(jìn)入并將文字與按鈕逐漸隱藏掉。
進(jìn)入點(diǎn)擊開(kāi)始按鈕之后,并沒(méi)有立即開(kāi)始游戲,而是播放了一段過(guò)渡動(dòng)畫(huà)。
這段動(dòng)畫(huà)通過(guò)打字的方式向我們介紹了游戲的背景,讓游戲者化身為一名阿爾茲海默癥患者。在Scratch中,對(duì)于單個(gè)文字的操作是非常有限的,并沒(méi)有專(zhuān)門(mén)的語(yǔ)句來(lái)控制文字。例如這里的打字效果,需要將文字一個(gè)一個(gè)的顯示出來(lái),直接拖動(dòng)語(yǔ)句通過(guò)代碼邏輯是無(wú)法實(shí)現(xiàn)的。于是,就要轉(zhuǎn)變思路,代碼不行就從造型上入手,我們把文字看成是一個(gè)整體,每多一個(gè)文字就多一個(gè)造型,這樣不斷的切換造型就可以實(shí)現(xiàn)打字的動(dòng)畫(huà)效果了,這就是作品中使用的方法。
果凍老師簡(jiǎn)單的畫(huà)一下大概就是這個(gè)樣子的:
每個(gè)造型都比前一個(gè)多一個(gè)文字,其中從第一個(gè)開(kāi)始每間隔一個(gè)造型還給文字的后面添加了一個(gè)“I”的符號(hào),這樣在動(dòng)畫(huà)中打字的效果就更加逼真了。
當(dāng)接收到進(jìn)入的廣播后,首先將造型初始化為第一張,然后就不斷的切換下一個(gè)造型,這段話總共有61個(gè)字,那么就需要切換61次,當(dāng)重復(fù)執(zhí)行結(jié)束后,打字動(dòng)畫(huà)就完成了,接著再使用虛像特效將文字整體逐漸的隱藏掉,最后廣播開(kāi)始就進(jìn)入游戲的正式環(huán)節(jié)。
很簡(jiǎn)單,是吧!但是這里有一個(gè)小問(wèn)題,就是這段打字動(dòng)畫(huà)還是挺耗時(shí)的,如果每次打開(kāi)游戲都要看一遍也有點(diǎn)太煩人了吧,所以我們還要給這個(gè)動(dòng)畫(huà)添加一個(gè)可以跳過(guò)的功能,比如按下鍵盤(pán)的空格鍵就可以直接進(jìn)入游戲:
接下來(lái),就趕快按下空格鍵開(kāi)始游戲吧。
開(kāi)始果凍老師第一次游戲進(jìn)行到這里的時(shí)候是有些驚訝與疑惑的,驚訝的地方在于這竟然是一個(gè)3D立體的效果,太棒了,孫佳閱同學(xué)真的厲害!疑惑的地方在于雖然界面上有一個(gè)簡(jiǎn)單的提示,告訴我按方向鍵,但是我還是不知道該如何操作進(jìn)入下一步。
于是,老師就打開(kāi)游戲的源代碼仔細(xì)的閱讀了一下,原來(lái)這里需要我們按下方向鍵收集所有的碎片,收集的方法就是讓每個(gè)碎片都碰到舞臺(tái)的邊緣。這樣子啊,看來(lái)我們要在游戲中把提示寫(xiě)的更清楚些,否則就會(huì)出現(xiàn)玩到一半卡住進(jìn)行不下去的尷尬情況了。
搞清楚了游戲的玩法,就來(lái)看接收開(kāi)始廣播的代碼吧。
接收開(kāi)始廣播的角色有很多,果凍老師數(shù)了一下,一共有13個(gè)。
哇,這么長(zhǎng)的一串!別害怕,果凍老師將這些角色分成了四類(lèi),點(diǎn)1到點(diǎn)4是一類(lèi),畫(huà)筆角色是一類(lèi),碎片1-1到1-6以及黑色唱盤(pán)是一類(lèi),最后背景是一類(lèi)。每一類(lèi)的角色它們的代碼是類(lèi)似的,所以只要各選出一個(gè)角色將它的代碼搞清楚,上面截圖中的一長(zhǎng)串角色就都清楚了,是不是一下子簡(jiǎn)單多了!
點(diǎn)1到點(diǎn)4是四個(gè)點(diǎn)坐標(biāo),它們?yōu)楫?huà)筆的畫(huà)線提供參考點(diǎn),按下鍵盤(pán)的方向鍵可以移動(dòng)點(diǎn)坐標(biāo),同時(shí)畫(huà)筆畫(huà)出的線也會(huì)跟著點(diǎn)移動(dòng)。
比如點(diǎn)1的代碼:
按下不同的方向鍵點(diǎn)1會(huì)向不同的方向移動(dòng),移動(dòng)是通過(guò)改變角色的X或Y坐標(biāo)實(shí)現(xiàn)的。
點(diǎn)2、點(diǎn)3、點(diǎn)4的代碼與點(diǎn)1是類(lèi)似的,只是初始化的位置坐標(biāo)不一樣而已。這四個(gè)點(diǎn)一起組成了一個(gè)矩形。
OK,點(diǎn)的坐標(biāo)設(shè)置好了,那就該畫(huà)筆登場(chǎng)了。
畫(huà)筆接收到開(kāi)始的命令后,先將收集數(shù)量這個(gè)變量初始化為0,它是用來(lái)記錄我們收集到碎片的數(shù)量,后面我們每收集一個(gè)碎片它的值就會(huì)增加1。
接著,代碼都是有關(guān)繪制線條的,由于背景是黑色的,所以將畫(huà)筆設(shè)置為白色,這樣線條更明顯突出,然后放置一個(gè)重復(fù)執(zhí)行語(yǔ)句,這個(gè)語(yǔ)句很重要,它的意思是說(shuō)畫(huà)筆會(huì)一直不停的繪制,添加上重復(fù)執(zhí)行的語(yǔ)句,白色的線條才會(huì)隨著四個(gè)點(diǎn)的移動(dòng)而移動(dòng)。果凍老師在截圖中標(biāo)記了繪制過(guò)程中的各個(gè)關(guān)鍵點(diǎn),每一輪的繪制都是在瞬間完成的,如果在個(gè)點(diǎn)之間添加上等待時(shí)間,就可以看到繪制的過(guò)程。
在代碼中還有一個(gè)非常重要的語(yǔ)句就是全部清除,它被放在重復(fù)執(zhí)行的里面,全部清除的意思就是清除之前繪制的所有線條,放在重復(fù)執(zhí)行里面就可以保證每一輪繪制的線條都是獨(dú)立的,不會(huì)和之前繪制的線條混在一起。這樣說(shuō)可能不太清楚,同學(xué)們嘗試在源代碼中刪除全部清除這條語(yǔ)句,再看游戲的效果,就知道果凍老師要表達(dá)的意思了。
第一張拼圖一共有六個(gè)碎片,它們隨機(jī)分布在頁(yè)面中,并且根據(jù)三維坐標(biāo)系近大遠(yuǎn)小的特點(diǎn),設(shè)置碎片為不同的大小,這樣就在二維平面中模擬出了三維空間的效果。
以第一個(gè)碎片的代碼為例:
第一條語(yǔ)句設(shè)置了角色的拖動(dòng)模式為不可拖動(dòng),意味著游戲中我們不能用鼠標(biāo)來(lái)拖動(dòng)角色,也就是說(shuō)它的位置是不能用鼠標(biāo)改變的。碎片1的大小設(shè)置為20,并顯示在(90,150)這個(gè)位置。接下來(lái),拖動(dòng)重復(fù)執(zhí)行直到碰到舞臺(tái)邊緣?這組語(yǔ)句到腳本區(qū),表示碎片會(huì)一直執(zhí)行重復(fù)里面的代碼,直到碰到舞臺(tái)邊緣才繼續(xù)執(zhí)行重復(fù)后面的代碼。
重復(fù)執(zhí)行里面的代碼和點(diǎn)1是類(lèi)似的,按下不同的方向鍵角色會(huì)向不同的方向移動(dòng)。不一樣的是碎片除了距離會(huì)移動(dòng)之外,它的大小也會(huì)發(fā)生變化,這樣設(shè)置的原理是,在三維空間中物體朝觀察者方向移動(dòng)時(shí),它在觀察者眼中的投影是逐漸變大的,而反方向移動(dòng)時(shí)它在觀察者眼中的投影是逐漸變小的,同學(xué)們可以試一試你觀察一個(gè)物體運(yùn)動(dòng)時(shí)是不是這樣子呢?
除了大小的變化,碎片與點(diǎn)還有一點(diǎn)不一樣,就是當(dāng)按下左或者右方向鍵時(shí),碎片X坐標(biāo)移動(dòng)的距離是0.5,而點(diǎn)移動(dòng)的距離是1,它們移動(dòng)的距離是不一樣的,這樣做也是為了模擬物體在真實(shí)三維空間中的效果,按下左右方向鍵就相當(dāng)于觀察者左右在移動(dòng),他的視角就會(huì)發(fā)生改變。在真實(shí)世界中當(dāng)觀察者視角發(fā)生變化后,遠(yuǎn)近物體在眼中移動(dòng)的距離是不一樣的,遠(yuǎn)處物體移動(dòng)的快,近處物體移動(dòng)的慢,這種現(xiàn)象有一個(gè)名字叫做“視差”,代碼中就是根據(jù)這個(gè)原理設(shè)置的。
接收開(kāi)始廣播的幾個(gè)重要角色果凍老師就介紹完了,現(xiàn)在我們就可以按下鍵盤(pán)的方向鍵來(lái)收集碎片:
在下一篇文章中,我們繼續(xù)介紹游戲后面的情節(jié),碎片收集齊后還要將這些碎片拼接成一幅完整的照片,我們一共要完成五幅照片的拼接游戲才算完成。好了,那我們下次再見(jiàn)吧!
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過(guò)郵件及時(shí)和我們聯(lián)系刪除

- 上一篇
學(xué)好Scratch必知的二三事,別樣的Scratch積木分類(lèi)(下)
利利:上一篇文章當(dāng)中,我們談到可以將Scratch當(dāng)中的積木分為兩大類(lèi),分別是“基礎(chǔ)效果類(lèi)”和“復(fù)雜功能類(lèi)”。基礎(chǔ)效果類(lèi)包含表現(xiàn)層以及交互層兩種,那么,復(fù)雜功能類(lèi)積木包含哪些內(nèi)容呢? 今天我們繼續(xù)來(lái)談Scratch當(dāng)中的積木類(lèi)別,以
- 下一篇
scratch第五課
上方藍(lán)字“信息技術(shù)考試”里有更多課程。 在第四課的基礎(chǔ)上修改,如下圖測(cè)試。請(qǐng)用大寫(xiě)字母ASDF測(cè)試。