官术网_书友最值得收藏!

2.3 讓名字動起來

2.3.1 介紹

米小紅小朋友很喜歡舞臺的感覺,可是他不能隨時隨地到舞臺表演,怎么辦呢?有一天她想到了一個辦法,讓自己的名字在舞臺上動起來。說做就做,使用Scratch讓名字隨音樂動起來吧!

2.3.2 制作素材準備

背景使用庫里面的Concert。

這次我們會用一段背景音樂,選中已經加入的背景,點擊【聲音】,在左下角點擊【選擇一個聲音】。

進入聲音庫后,選擇“可循環”。一般可循環的音樂可作為一直播放的背景音樂。當鼠標移動到對應的音樂格子時系統就能自動播放??梢赃x擇自己喜歡的,這里選擇Dance Energetic,點擊后就可以把音樂放到背景里。

Scratch可以對聲音進行調整,包括各種效果,大家可以每一個都嘗試一下,這里就不詳細介紹了。

這一次的角色就用“米小紅”這個名字,圖庫里面是沒有的,所以我們需要自己做。為了讓名字由各種方式動起來,我們需要把“米小紅”3個字分成3個角色,一個字為一個角色。在“角色控制區”中選擇“繪制”,建立一個空的新角色。

選擇繪制工具中的“T”,這時可以輸入文字,用中文輸入法輸入“米”字,然后拖到右下角,適當把字放大一些。

在填充中通過滑動3個不同的選項來選擇自己想要的顏色,我們這里選擇一個黃色!

這樣在舞臺上就會多了一個“米”字。用同樣的方法,我們把另外兩個角色“小”和“紅”都做出來??梢栽囍诶L制“小”的時候點擊工具欄的“箭頭”啟用一下顏色旁邊的輪廓,為字加上一個不同顏色的外邊框。好了,現在三個角色都做好了。為便于下面的講解,我們把角色的名字改一改。到此,我們的素材都準備好了。

2.3.3 制作詳細步驟

在綠旗啟動時,我們讓“米”“小”“紅”先按順序依次動起來,并且它們動的方式會有所不同,最后讓它們一起有節拍地動起來。所以下面我們將分解每一個角色的動作,并教會大家一個消息的廣播和接收功能。在“米”的腳本上,我們先放上“事件”里的【當綠旗被點擊】,再讓米字變換幾個顏色,加入“外觀”中的【將顏色特效增加】積木。為了讓它有一個變化的過程,別忘了在外面加上一個循環控制,使用“控制”中的【重復執行…次】積木,這里就暫定為5次!同時,為了能看清楚變化的過程,在每次變化之前等待0.1秒,所以卡合“控制”中的【等待…秒】,把參數改成0.1。

經過變化后,“米”就不再是原來的顏色了,如果我們想讓它又變回原來的顏色,并且在變回的過程中有一個顏色的變化,我們可以利用上面一段循環代碼,在【重復執行】上點擊右鍵,選擇“復制”,這樣鼠標就會自動有一段一模一樣的代碼,直接把它卡合到上一個【重復執行】積木下面。如果要顏色倒回去,我們只需要讓顏色的特效每次減少25,也就相當于是增加-25了。

“米”做完了自己的動作后,怎么讓“小”動起來呢?Scratch提供了一個叫“消息的廣播和接收”的功能,就相當于是一個角色拿著“話筒”向另一個角色喊話,另一個角色聽到后就開始執行一樣。下面我們來用一下這個功能。

“米”在結束所有動作后,在最后面卡合“事件”的【廣播】,因為之后可能還要做多個廣播,所以我們新建一下消息,點擊【廣播】的“消息1”就會顯示一個菜單。我們選擇“新消息”后,就會彈出一個“新消息”窗口,將消息的名稱設為“呼叫小”!請注意,由于本書教的都是基礎,因此我們用最容易懂的中文來命名這個名稱(包括往后的一些參數),如果以后學到了文本類的編程,就需要使用有意義的英文來命名。

下面我們該讓“小”來接收這個消息了。選擇“小”這個角色,在代碼區加入“事件”里的【當接收到…】積木,這里默認就已經是“呼叫小”的消息參數了。之后,我們就可以開始讓“小”動起來了。

嘗試讓“小”做一下放大和縮小的變化。使用“外觀”中的【將大小增加…】積木,讓它循環放大5次。這里有一個需要注意的地方,當測試積木放大時,就算把程序停止重新來,但是放大的字每次都不會像顏色那樣進行一次大小的初始值設置,所以在這里我們需要在程序運行時馬上對“小”的大小進行一次初始值設置。加入【當綠旗被點擊】,然后卡合“外觀”的【將大小設為100】的積木,這樣在多次測試中都能保持同樣的變大效果。注意,后面做一些復雜的程序時,經常需要對角色就大小、方向等各種參數進行初始化。

之后我們再讓“小”慢慢變回原來的大小,復制“重復執行”這一段代碼,然后將大小增加10改成增加-10,最后加入消息廣播,告訴“紅”要動起來了!我們把消息名稱設定為“呼叫紅”。

選擇“紅”這個角色,在代碼區加入“事件”里的【當接收到…】積木,參數選擇“呼叫紅”。這樣“紅”就接收到“小”的消息通知了。之后我們就可以開始讓“小”動起來了。

這一次我們嘗試讓“紅”轉一個圈吧!但在這之前,我們還是養成一下習慣,先為“紅”來一個數據初始化。加入【當綠旗被點擊】,然后卡合“外觀”的【面向90方向】積木。必要時,如果為了之后加入更多的動作,也可以加入【將大小設為100】的積木來初始化大小。之后我們就可以開始做“紅”的轉圈腳本了。

如果要讓“紅”轉一個360的圈,我們可以使用“運動”里的【左轉…度】或【右轉…度】。這里我們讓它右轉!360度一圈,我們如果想讓它轉回原來的位置并且每次右轉15度,那么一共需要轉多少次呢?一共需要360/15=24次,所以我們需要在外面包上24次的循環。

先點擊積木組測試一下!細心的人一定會發現它出了一個我們大家都意想不到的問題——“紅”竟然在轉的過程中跑出舞臺了!這里先請大家認真思考一下,為什么會發生這樣的事情呢?

相信學過圓的朋友都想到了,一個正圓的中心點就是圓心,如果一個物體需要旋轉正圓的360度,就需要圍繞一個圓心進行旋轉。很顯然,“紅”在旋轉的時候,正圓的范圍已經超出了舞臺,所以“紅”才會轉到舞臺外面。那么,如何讓“紅”成功轉完360度同時又不離開舞臺呢?物體繞圓心旋轉時,物體中心點與圓心間的距離就相當于是圓的半徑,當圓心與物體中心點連接長度越小時,物體旋轉的范圍就越少,如果當圓心與物體中心重疊時,物體的旋轉就成為自轉了。我們利用這個原理,修改一下“紅”的圓心范圍。

點擊造型,可以看到圓心,如果看不清,可以點擊右下角的放大鏡,這樣就能清晰地看到圓心了。

然后只需要把“紅”拖到這個圓心,大約讓紅的中心點接近這個圓心就可以了。測試一下“紅”是不是已經在原地自轉了。

有些比較喜歡自己研究的朋友在思考和測試這個程序的過程中,可能還會在“運動”中發現一塊很特別的積木——【將旋轉方式設為…】。這塊積木用于改變角色的旋轉方式,包括“左右翻轉”“不可旋轉”“任意旋轉”,默認是“任意旋轉”,如果在剛才使用這塊積木對“紅”做過“左右翻轉”的動作,就會發現“紅”被拖到圓心后,“紅”沒有辦法以圓的方式自轉。這也跟初始值保留有關。如果想讓“紅”聽話地轉起來,最好在循環之前加入【將旋轉方式設為任意旋轉】這塊積木。不設初始值的原因是,旋轉方式可能在程序里有多次不同的變化,設置初始值不如在旋轉之前改變方式更靈活。

到了這里,我們就按照自己的想法讓“米”“小”和“紅”依次運動了一次,就當作熱身了!下一步,我們讓它們配合舞臺的背景一起動起來!

“紅”在動完以后,需要告訴舞臺播放音樂,然后所有角色一起動起來,所以當然還是需要用到“消息廣播和接收”的功能了。

在“紅”單獨動完之后加入消息廣播,告訴背景和所有角色開始動了!我們把消息名稱定為“呼叫所有”。

然后背景和所有角色都加入【當接收到呼叫所有】積木,就開始對它們的動作做腳本了。

背景的動作:主要是開始播放背景音樂。

點擊背景,卡合“聲音”里的【播放聲音…等待播完】,之前已經在背景中加入了一段音樂,并使用循環讓它不斷地播放。積木默認也是播放這一段音樂。

“米”的動作:一邊縮小一邊向左移動,再一邊放大一邊向右移動回原來的位置,就這樣不斷循環變化。這里特別提醒一下,之前“米”是沒有做初始化動作的,所以這里也需要做一下大小的初始化。由于“米”后面有位移的動作,所以還需要做一個位置的初始化,可以使用“移動”中的【移到x:… y:…】積木。這塊積木會記錄角色當前的位置,所以只要把角色舞臺位置放好,直接使用積木上面的數值就可以了,或者通過角色區域中的坐標系得出。

循環8次,卡入【將大小增加-10】和【移動-10步】;然后循環8次,卡入【將大小增加10】和【移動10步】;最后為了讓它不斷地變化下去,我們還可以在外面再加入一層循環。我們通常稱之為循環的嵌套。

“小”的動作:變著顏色、轉著圈地不斷上下跳。

注意

給“小”的初始狀態加上【面向90方向】,同時也因為有位移的操作,所以也要增加位置的初始狀態。

“小”的初始化積木

首先我們解決如何向上下移(向左右移動我們試多了)。上下移動一般可以使用“運動”中的【將y坐標增加…】積木。如果我們想用24次完成一個自轉,那么在回歸到原來的位置時,我們可以通過兩個12次循環完成。第1個12次循環,卡入【將顏色增加25】、【右轉15度】、【將y坐標增加10】;第2個12次循環,卡入【將顏色增加-25】、【右轉15度】、【將y坐標增加-10】;最后為了讓它不斷地變化下去,在外面再加入一層循環。

“紅”的初始化積木

“紅”的動作:可以嘗試做復雜一點,依然是把初始化的積木先做好,讓“紅”邊翻跟頭邊縮小,同時向右移;然后邊翻跟頭邊放大,同時向左移,左移位置超過剛才右移的兩倍;最后邊翻跟頭邊縮小,同時再向右移,恢復初始狀態。

動作看著好像挺復雜,但先不要急,我們可以把它慢慢分解為一個個大家已經掌握的步驟。程序其實就是先把復雜的問題分解成各個簡單的步驟再把這些步驟組合起來的過程。

根據上面的第一次動作,我們可以分為3大步驟,而每個步驟又能分成單獨的4個指令來完成:第1個12次循環,卡入【將x坐標增加5】、【右轉30度】和【將大小增加-5】;第2個24次循環,卡入【將x坐標增加-5】、【右轉15度】和【將大小增加5】;第3個12次循環,卡入【將x坐標增加5】、【右轉30度】和【將大小增加-5】;之后要讓每一次動作不斷重復執行,只需要在外層增加一個無限循環就可以了。

把整個動作分解后,是不是容易了很多?

細心的人可能還會發現,這次我們的左右移動不再簡單地使用【移動…步】積木,這是為什么呢?請大家嘗試一下把【將x坐標增加…】換成【移動…步】,比較一下“紅”的動作效果。程序是需要大家經常動手測試的,所以這里就不做詳細論述了,看看下面“紅”的積木變化。

到此,米小紅同學就成功讓名字動起來了。這里有兩個比較重要的知識點,第一個是“消息的廣播和接收”,通過廣播和接收,可以讓不同的角色之間互相配合,這在往后的故事類等場景應用中比較多;第二個是“循環嵌套”,在復雜的程序中,往往都會有這樣的嵌套,嵌套的層數越多,動作的組合就越豐富,但層數越多,有時越容易引起BUG,特別是文字類編程,所以盡量慎用多層循環嵌套。我們還學會并比較了一些比較常用的角色運動、外觀之間的組合,這些都可以讓我們的角色動作更靈活多樣。

2.3.4 開動大腦拓展一下

本動作中,每個角色單獨運動時,舞臺都沒有配背景音樂,嘗試給它們配上幾個不同的音效。

可以嘗試為各個文字的動作方式增加更多不同的組合。

利用“消息的廣播和接收”功能,嘗試寫兩個角色的一段小對話。

主站蜘蛛池模板: 香河县| 南漳县| 上蔡县| 苏州市| 梅州市| 林芝县| 灵丘县| 石楼县| 黑龙江省| 承德市| 吴江市| 时尚| 文登市| 吉林市| 图片| 葵青区| 班玛县| 江门市| 林州市| 西乌珠穆沁旗| 石河子市| 皋兰县| 琼海市| 汉川市| 大渡口区| 罗定市| 台北县| 芦山县| 普兰店市| 邛崃市| 东乡族自治县| 丰都县| 石河子市| 广昌县| 刚察县| 独山县| 普洱| 漳浦县| 分宜县| 武乡县| 延吉市|