資訊內(nèi)容
Scratch少兒編程第75講-海洋世界-進(jìn)階版
進(jìn)階教程不光是把程序做得復(fù)雜,更多時候是把程序的細(xì)節(jié)處理好,今天CC哥就把海洋世界之前做過的一個最初級的程序,配上一些細(xì)節(jié)的完善,讓大家再看看這個游戲跟初級課程做的游戲會有什么區(qū)別。
先看看游戲視頻:
視頻沒看清楚的地方,下面一步步介紹。
氣泡的優(yōu)化思路
1:首先CC哥第一眼就覺得之前的游戲里最大的問題就是氣泡不會動。
因?yàn)檫@只是個背景圖片,氣泡當(dāng)然不會動了,那我們想把它變成會動的氣泡,那不就生動了?
如何變成會動的氣泡呢?CC哥開始思考相應(yīng)的物理知識:
1:氣泡在浮起的時候,隨著壓強(qiáng)的降低,是不斷變大的。
2:因?yàn)樽兇?,受到的浮力也不斷增大,所以氣泡是不斷加速上浮的,而且加速度越來越快的?
3:因?yàn)槭艿礁鞣N外部環(huán)境影響,氣泡是不可能直線上浮的,是在上浮過程中左右晃動的。
有了這些物理知識,那么CC哥要做的氣泡程序就必須符合這個條件才行。
看到這里大家明白沒有?剛才你看到的游戲視頻里的氣泡可不是什么動圖和造型切換,而是CC哥用編程做出來的。
通過這個動圖大家觀察出來氣泡怎么產(chǎn)生的了嗎?
氣泡的程序設(shè)計
首先這個CC哥是用克隆體來做的:
1:第一步要設(shè)計好氣泡的樣子和冒出的位置
氣泡就是一個綠色的小點(diǎn)。CC哥構(gòu)想有海底冒出三個氣泡的位置,直接copy了三個氣泡的角色,這樣可以簡化編程。這三個角色的代碼都是一模一樣的。
2:不斷克隆自己
克隆的時間間隔,CC哥用了講過的隨機(jī)數(shù)技巧,平常的隨機(jī)數(shù)只能取整數(shù),但是CC哥想要的隨機(jī)的時間間隔很短,大概在0.02秒和0.06秒之間,所以我們只要把取得隨機(jī)數(shù)除以50,就可以得到小數(shù)的隨機(jī)數(shù)。
3:氣泡上升過程中的變化:
這段代碼主要注重兩部分:
a:?上升加速
上升加速有兩種方法,一種是用加法,一種是用乘法。區(qū)別就是固定加速度還是變加速度。比如我們平常模擬重力效果時就用加法,我們會把上升速度每次循環(huán)時固定增加1或-1,這就是固定加速度。而乘法是我們每次把加速度的值每次循環(huán)乘以一個系數(shù),那么這種變化就會產(chǎn)生累積,會越來越大。比如:1.1
* 1.1 * 1.1 * 1.1 * 1.1 * 1.1 * 1.1 =
1.95。這就是炒股里說的復(fù)利,每年只賺10%,七年下來就賺翻翻了。?
另外考慮多一個細(xì)節(jié),就是每次氣泡冒出來的大小是不固定的,有的出來小些,有的大些。
為什么這么考慮?是想讓氣泡在上升的過程中有交錯的效果,比如大的氣泡升的快,就會超過小的氣泡,視覺效果就更真實(shí)。所以初始的上升速度是跟氣泡的大小有關(guān)系的。
b: 水平晃動
跟晃動部分相關(guān)的代碼:
1:晃動只要處理X軸的運(yùn)動效果就可以。
2:用正弦函數(shù)就可以得到一個-1~1之間的變換值。再配上Y軸的運(yùn)動,就會產(chǎn)生螺旋上升的效果。
3:設(shè)置晃動變量增加的數(shù)值,是為了控制氣泡群的寬度,晃動增加的越快,氣泡群的直徑就越窄。
4:在每次循環(huán)的運(yùn)動過程中用了隨機(jī)數(shù)來變換振幅,這樣就可以造成上升過程中的隨機(jī)運(yùn)動效果,而不是一個標(biāo)準(zhǔn)的螺旋上升曲線。
有沒有覺得CC哥思考得還是很周全的?程序不復(fù)雜,但是效果很好。這一直是CC哥追求的,越簡單越完美。
順便優(yōu)化一下鯊魚
這一講主要是講氣泡的,但是CC哥在做完了氣泡之后,就停不下來,還想把鯊魚優(yōu)化一下。
這是老的被鯊魚吃掉效果,是不是簡陋的想哭呀。
CC哥看到造型里還有一個張嘴的造型,這不正好是吃魚的動作嘛,趕緊利用以前的學(xué)習(xí)技巧,把這個改善一下。
這里面也有細(xì)節(jié)要處理:
1:鯊魚有兩種,一種是固定巡航的鯊魚,沿著固定路徑在走,那么如果碰到小魚的時候是背面碰到的,那么鯊魚要轉(zhuǎn)身吃掉小魚。
2:在吞吃小魚的時候,是嘴部吞的,嘴部并不是鯊魚的中心位置,所以程序處理要退20步。
3:要配音
過程控制
以前處理程序流暢,結(jié)束的時候就是一個停止全部腳本。
其實(shí)配合好消息命令,還有這些停止命令,就可以很有效的控制游戲的進(jìn)程。CC哥就用這些命令進(jìn)行游戲的進(jìn)程控制,給小魚附加上生命值,變成了一個完整的游戲。
這次的進(jìn)階課程,并不是要強(qiáng)調(diào)多高深的編程技巧,而是強(qiáng)調(diào)編程設(shè)計中如何對細(xì)節(jié)進(jìn)行思考,一些小的技巧用在細(xì)節(jié)的處理上面,就會為程序增色不少。所以學(xué)習(xí)過程中,最重要的是活學(xué)活用,而不是天天追求難點(diǎn)。
·END·
跟我學(xué)Scratch編程不用花錢成為Scratch高手
