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