資訊內(nèi)容
用Scratch制作煙花
授權(quán)轉(zhuǎn)載?|?千里馬快樂(lè)編程?qianlima_biancheng
原文作者 | CG
原文標(biāo)題 |?用Scratch制作煙花
標(biāo)簽:難度中級(jí);動(dòng)畫(huà);變量;隨機(jī)數(shù);克??;軌跡;畫(huà)筆;煙花;
今天我們來(lái)介紹一些煙花的知識(shí),并用Scratch編程制作煙花動(dòng)畫(huà)。先來(lái)看看動(dòng)畫(huà)效果吧:
上面的煙花動(dòng)畫(huà)其實(shí)是由四種不同類型的煙花特效組成的。它們可是全部都是通過(guò)畫(huà)筆實(shí)時(shí)計(jì)算出來(lái)的喲。
1.?????知識(shí)點(diǎn)
本文介紹的煙花制作方法使用了下面的知識(shí)點(diǎn):
1.1?重力加速度(拋物線)
煙花是是由火藥和金屬粉末組成的,五彩繽紛的顏色其實(shí)是燃燒時(shí)不同的金屬離子(如鎂、鋁等)與氧分子發(fā)生化學(xué)反應(yīng)而發(fā)出的獨(dú)特顏色。所以煙花是有重量的。有重量的物體在大氣中運(yùn)動(dòng)都會(huì)受到地球引力的作用,呈現(xiàn)出拋物線軌跡。所以要制作好煙花效果首先要知道如何通過(guò)編程描述拋物線。簡(jiǎn)單來(lái)說(shuō)就是:
-
垂直方向下落速度會(huì)越來(lái)越快(有一個(gè)面向地心的固定的加速度)
-
水平方向速度不變
關(guān)于拋物線運(yùn)動(dòng)的更多知識(shí)可參考千里馬的這篇文章:從"憤怒的小鳥(niǎo)"學(xué)習(xí)用編程展示物理規(guī)律
1.2?漸隱效果(彗星效果)
?
這是做煙花軌跡的一個(gè)竅門和重點(diǎn)。我們希望看到的煙花線條軌跡是頭部較亮,尾部較暗,呈漸隱效果,如下圖:
?
這種效果的實(shí)現(xiàn)方法是:
-?????? 制作一個(gè)和屏幕一樣大的全黑角色:
-?????? 把該角色的虛像效果設(shè)成90(就是說(shuō)它的透明度變成10%)
-?????? 然后不停地使用圖章讓它覆蓋屏幕:
這種實(shí)現(xiàn)方法的原理如下圖所示:
-
畫(huà)筆畫(huà)出來(lái)的軌跡實(shí)際上是由一系列點(diǎn)組成的。如果畫(huà)筆是從左向右運(yùn)動(dòng)的,則左邊的點(diǎn)比右邊的點(diǎn)先在舞臺(tái)上出現(xiàn)。上圖五個(gè)橙色方格代表了畫(huà)筆的軌跡點(diǎn),1最先出現(xiàn),5最晚出現(xiàn)。
-
上面程序里虛像效果90的黑色角色相當(dāng)于上圖中標(biāo)記為A的黑色方塊。兩個(gè)A疊起來(lái)就形成B的效果(B比A稍微黑一點(diǎn)),三個(gè)A疊起來(lái)就形成C,四個(gè)A疊起來(lái)就形成全黑的D。這個(gè)疊起來(lái)的動(dòng)作就相當(dāng)于程序里的“圖章”。
-
把橙色方格和黑色方塊疊起來(lái)就是最終效果。沒(méi)有被黑色方塊蓋住的5號(hào)方格就是原來(lái)的顏色,4-3-2-1依次變暗,1或者更早之前出現(xiàn)的方格就完全看不到了。
動(dòng)圖效果如下:?
1.3?3D效果
?
有立體感的3D煙花更加好看,制作3D效果需要了解一定的3D知識(shí)?;镜?D知識(shí)請(qǐng)參考千里馬這一篇文章:用Scratch做一個(gè)3D引擎
當(dāng)然3D制作有點(diǎn)小復(fù)雜,也并不是制作煙花必需的。
好,下面可以開(kāi)始制作了。
2.?????制作方法
?
2.0 輔助角色
?
在開(kāi)始畫(huà)煙花軌跡之前,我們需要先建立兩個(gè)角色:一個(gè)是上面1.2章節(jié)講過(guò)的用來(lái)實(shí)現(xiàn)漸隱效果的黑色角色;另一個(gè)是聲音角色,用來(lái)集中控制聲音的播放。這樣在其它角色里只需要廣播播放某種聲音的消息,這個(gè)聲音角色就可以播放相對(duì)應(yīng)的聲音。
?
聲音效果可以極大地增強(qiáng)現(xiàn)實(shí)感,所以請(qǐng)務(wù)必給動(dòng)畫(huà)配上聲音。
?
2.1 煙花發(fā)射
首先,我們做出煙花發(fā)射上升的效果,其實(shí)就是用畫(huà)筆畫(huà)一條有重力加速度的從下往上升的曲線,再配上音效。
?
效果如下:
2.2 爆炸散開(kāi)
-?????? 接著,我們讓煙花在上升到最高點(diǎn)時(shí)爆炸散開(kāi)(vy=0時(shí)升到最高點(diǎn),之后速度向下而下降)。散開(kāi)其實(shí)就是使用克隆來(lái)產(chǎn)生很多的子煙花軌跡。
-?????? 子煙花軌跡應(yīng)該比上升時(shí)的軌跡要小。
-?????? 為了使爆開(kāi)后的各條煙花軌跡呈圓形,我們控制水平方向和垂直方向的速度,使得vx=2*cosA和vy=2*sinA(A是隨機(jī)變化的角度值,代表速度的方向;2代表速度的值。這樣使得每條子煙花的速度方向發(fā)生變化,但速度的值不變,形成圓形)。原理如下圖所示:
?克隆體的程序:
第一種煙花效果做好了:
2.3 閃閃的煙花
接下來(lái)我們做下面這種閃閃的煙花效果:
-?????? 首先是用克隆的方法畫(huà)出很多條較細(xì)的煙花拋物線軌跡。同樣一束煙花的出發(fā)點(diǎn)應(yīng)該一樣。通過(guò)改變它們的初始水平速度和垂直速度、以及線條顏色和大小,形成不同的煙花線條:?
效果:?
-?????? 接下來(lái)做閃閃的亮點(diǎn)效果。首先是要改變角色的造型(變成一個(gè)純色的圓形);然后在克隆體的程序中,在煙花線條消失之前,使用圖章留下圓點(diǎn)。由于章節(jié)1.2中提到的漸隱作用,圖章留下來(lái)的圓點(diǎn)會(huì)一閃而過(guò)消失在黑暗中。記得改變圓點(diǎn)的大小和顏色哦。
第二種煙花效果也做好了:
2.4 煙花文字
接下來(lái)做煙花文字效果:?
-?????? 首先是用造型工具創(chuàng)建一個(gè)文字角色
-?????? 讓文字先隱藏,先做出煙花發(fā)射上升效果
-?????? 當(dāng)煙花上升到最高點(diǎn)時(shí)(vy=0)即爆炸,然后文字出現(xiàn),并使用像素化讓其模糊。
-?????? 之后文字做重力加速下落。
-?????? 在下落過(guò)程中不停使用圖章留下軌跡,并配合章節(jié)1.2中提到的漸隱作用。
-?????? 再使用虛像使得文字逐漸消失
-?????? 最后用同樣方法做出其它的文字煙花,改變顏色、位置及發(fā)射時(shí)間,效果如下:
2.5 3D煙花
-?????? 制作3D煙花效果需要了解3D特效的知識(shí),請(qǐng)先參考此文《用Scratch做一個(gè)3D引擎》,設(shè)置好視點(diǎn)、投射面、旋轉(zhuǎn)角度等:
-?????? 3D煙花和2.1-2.2節(jié)介紹的2D煙花一樣,也是包括發(fā)射上升-爆炸散開(kāi)的過(guò)程。首先也是要先發(fā)射一條在y方向做重力加速運(yùn)動(dòng)的煙花
-?????? 煙花上升到最高點(diǎn)后就爆炸散開(kāi):
-?????? 為了使爆開(kāi)后的各條煙花軌跡呈一個(gè)球體,我們控制x,y,z方向的速度,使得vy=2*sinA, vx=2*cosA*cosB,vz=2*cosA*sinB(A、B是隨機(jī)變化的角度值,它們控制速度的方向;2代表速度的值。這樣使得每條子煙花的速度方向發(fā)生變化,但速度的值不變,形成球體)。原理如下圖所示:
克隆體程序:
3D煙花的效果:
最后我們把各種不同的煙花組合在一起,就是這個(gè)效果:
原程序請(qǐng)參考:
https://scratch.mit.edu/projects/284146235/
3.?????小結(jié)
除了上面提到的知識(shí)點(diǎn),做好煙花效果的一個(gè)重要竅門是:多使用隨機(jī)數(shù)來(lái)改變時(shí)間、大小、顏色、速度等各種變量,做出各種不同的效果。煙花之所以吸引人,正是因?yàn)樗鼈儧](méi)有固定的模式,變幻莫測(cè)。同學(xué)們請(qǐng)盡情發(fā)揮自己的想象力,用編程做出更多更炫的煙花效果。
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過(guò)郵件及時(shí)和我們聯(lián)系刪除
