資訊內(nèi)容
Scratch少兒編程第75講-海洋世界-進(jìn)階版
進(jìn)階教程不光是把程序做得復(fù)雜,更多時(shí)候是把程序的細(xì)節(jié)處理好,今天CC哥就把海洋世界之前做過的一個(gè)最初級(jí)的程序,配上一些細(xì)節(jié)的完善,讓大家再看看這個(gè)游戲跟初級(jí)課程做的游戲會(huì)有什么區(qū)別。
先看看游戲視頻:
視頻沒看清楚的地方,下面一步步介紹。
氣泡的優(yōu)化思路
1:首先CC哥第一眼就覺得之前的游戲里最大的問題就是氣泡不會(huì)動(dòng)。

因?yàn)檫@只是個(gè)背景圖片,氣泡當(dāng)然不會(huì)動(dòng)了,那我們想把它變成會(huì)動(dòng)的氣泡,那不就生動(dòng)了?
如何變成會(huì)動(dòng)的氣泡呢?CC哥開始思考相應(yīng)的物理知識(shí):
1:氣泡在浮起的時(shí)候,隨著壓強(qiáng)的降低,是不斷變大的。
2:因?yàn)樽兇螅艿降母×σ膊粩嘣龃螅詺馀菔遣粩嗉铀偕细〉模壹铀俣仍絹碓娇斓摹?
3:因?yàn)槭艿礁鞣N外部環(huán)境影響,氣泡是不可能直線上浮的,是在上浮過程中左右晃動(dòng)的。
有了這些物理知識(shí),那么CC哥要做的氣泡程序就必須符合這個(gè)條件才行。
看到這里大家明白沒有?剛才你看到的游戲視頻里的氣泡可不是什么動(dòng)圖和造型切換,而是CC哥用編程做出來的。

通過這個(gè)動(dòng)圖大家觀察出來氣泡怎么產(chǎn)生的了嗎?
氣泡的程序設(shè)計(jì)
首先這個(gè)CC哥是用克隆體來做的:
1:第一步要設(shè)計(jì)好氣泡的樣子和冒出的位置


氣泡就是一個(gè)綠色的小點(diǎn)。CC哥構(gòu)想有海底冒出三個(gè)氣泡的位置,直接copy了三個(gè)氣泡的角色,這樣可以簡化編程。這三個(gè)角色的代碼都是一模一樣的。
2:不斷克隆自己

克隆的時(shí)間間隔,CC哥用了講過的隨機(jī)數(shù)技巧,平常的隨機(jī)數(shù)只能取整數(shù),但是CC哥想要的隨機(jī)的時(shí)間間隔很短,大概在0.02秒和0.06秒之間,所以我們只要把取得隨機(jī)數(shù)除以50,就可以得到小數(shù)的隨機(jī)數(shù)。
3:氣泡上升過程中的變化:

這段代碼主要注重兩部分:
a:?上升加速
上升加速有兩種方法,一種是用加法,一種是用乘法。區(qū)別就是固定加速度還是變加速度。比如我們平常模擬重力效果時(shí)就用加法,我們會(huì)把上升速度每次循環(huán)時(shí)固定增加1或-1,這就是固定加速度。而乘法是我們每次把加速度的值每次循環(huán)乘以一個(gè)系數(shù),那么這種變化就會(huì)產(chǎn)生累積,會(huì)越來越大。比如:1.1
* 1.1 * 1.1 * 1.1 * 1.1 * 1.1 * 1.1 =
1.95。這就是炒股里說的復(fù)利,每年只賺10%,七年下來就賺翻翻了。
?
另外考慮多一個(gè)細(xì)節(jié),就是每次氣泡冒出來的大小是不固定的,有的出來小些,有的大些。

為什么這么考慮?是想讓氣泡在上升的過程中有交錯(cuò)的效果,比如大的氣泡升的快,就會(huì)超過小的氣泡,視覺效果就更真實(shí)。所以初始的上升速度是跟氣泡的大小有關(guān)系的。
b: 水平晃動(dòng)



跟晃動(dòng)部分相關(guān)的代碼:
1:晃動(dòng)只要處理X軸的運(yùn)動(dòng)效果就可以。
2:用正弦函數(shù)就可以得到一個(gè)-1~1之間的變換值。再配上Y軸的運(yùn)動(dòng),就會(huì)產(chǎn)生螺旋上升的效果。
3:設(shè)置晃動(dòng)變量增加的數(shù)值,是為了控制氣泡群的寬度,晃動(dòng)增加的越快,氣泡群的直徑就越窄。
4:在每次循環(huán)的運(yùn)動(dòng)過程中用了隨機(jī)數(shù)來變換振幅,這樣就可以造成上升過程中的隨機(jī)運(yùn)動(dòng)效果,而不是一個(gè)標(biāo)準(zhǔn)的螺旋上升曲線。
有沒有覺得CC哥思考得還是很周全的?程序不復(fù)雜,但是效果很好。
這一直是CC哥追求的,越簡單越完美。


順便優(yōu)化一下鯊魚
這一講主要是講氣泡的,但是CC哥在做完了氣泡之后,就停不下來,還想把鯊魚優(yōu)化一下。

這是老的被鯊魚吃掉效果,是不是簡陋的想哭呀。

CC哥看到造型里還有一個(gè)張嘴的造型,這不正好是吃魚的動(dòng)作嘛,趕緊利用以前的學(xué)習(xí)技巧,把這個(gè)改善一下。

這里面也有細(xì)節(jié)要處理:
1:鯊魚有兩種,一種是固定巡航的鯊魚,沿著固定路徑在走,那么如果碰到小魚的時(shí)候是背面碰到的,那么鯊魚要轉(zhuǎn)身吃掉小魚。
2:在吞吃小魚的時(shí)候,是嘴部吞的,嘴部并不是鯊魚的中心位置,所以程序處理要退20步。
3:要配音

過程控制
以前處理程序流暢,結(jié)束的時(shí)候就是一個(gè)停止全部腳本。

其實(shí)配合好消息命令,還有這些停止命令,就可以很有效的控制游戲的進(jìn)程。CC哥就用這些命令進(jìn)行游戲的進(jìn)程控制,給小魚附加上生命值,變成了一個(gè)完整的游戲。
這次的進(jìn)階課程,并不是要強(qiáng)調(diào)多高深的編程技巧,而是強(qiáng)調(diào)編程設(shè)計(jì)中如何對(duì)細(xì)節(jié)進(jìn)行思考,一些小的技巧用在細(xì)節(jié)的處理上面,就會(huì)為程序增色不少。所以學(xué)習(xí)過程中,最重要的是活學(xué)活用,而不是天天追求難點(diǎn)。
·END·
跟我學(xué)Scratch編程不用花錢成為Scratch高手
