資訊內(nèi)容
Scratch全國少兒編程競(jìng)賽獲獎(jiǎng)作品《記憶碎片》解析上篇

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

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

- 上一篇
Scratch3.6下載與安裝
今天,我們一起來接觸一下Scratch編程。我們先為即將開始的編程做一個(gè)準(zhǔn)備。這節(jié)課教大家,如何去下載和安裝編程所需要的軟件。讓我們開始吧。 第一步打開瀏覽器,在地址欄中輸入,scratch.mit.edu,
- 下一篇
Scratch3.0少兒編程案例:猴子吃桃
一、案例簡介 ????猴子摘了一堆桃,第一天吃了一半,還嫌不過癮,又吃了一個(gè)。第二天又將剩下 的桃子吃了一半零一個(gè)。以后每天如此,到第 10 天清早,只剩下一只了。 本篇的少兒編程案例,通過scratch編程的方法,計(jì)算出猴子最初有多少個(gè)桃子。?