摘 要 本文對制作藍天白云提出新的解決方案,就是使用ActionScript3代碼實現(xiàn)其動畫效果,使之能夠在低效的CPU運行順暢。
關(guān)鍵字 藍天白云 ActionScript3.0
中圖分類號:TP319 文獻標(biāo)識碼:A
要想實現(xiàn)真實的藍天白云動畫,應(yīng)該拋棄原先的傳統(tǒng)方式,運用ActionScript腳本語言方可模擬真實的場景。根據(jù)現(xiàn)實的考慮和分析,我們使用了BitmapData類中兩個重要方法:perlinNoise和ColorMatrixFilter方法。通過使用這兩個方法,我們可以得到一個真實的動態(tài)云的效果并且對于天空和云的顏色也能輕易改變。當(dāng)然這樣的特效是非常消耗CPU資源。
首先來說說AS3中BitmapData類的perlinNoise方法。
PerlinNoise是基于一個復(fù)雜的算法來創(chuàng)建隨機紋理效果的方法。這個算法是完全定值的算法:只要輸入相同的參數(shù),必會輸出相同的結(jié)果。正是由于這種聰明的程序結(jié)構(gòu)使得我們將它用于產(chǎn)生隨機效果的變化。在AS3中,你可以創(chuàng)建BitampData對象,并在這個對象的顏色通道中對其參數(shù)使用PerlinNoise方法,從而使一個“原始”的BitmapData對象中包含PerlinNoise,能夠產(chǎn)生出大量的豐富效果。PerlinNoise方法很少單獨存在,大多數(shù)時候是與ColorMatrixFilter結(jié)合一起來使用。
下面我們以DispMapFilter為例。
rateX是負責(zé)水平方向的頻度。rateX的值越低,水平方向的頻度就越高。在rateX數(shù)值低的情況下,你將會看到大量的小云彩橫向散開分布。
rateY是負責(zé)垂直方向的頻度。rateY的值越低,垂直方向的頻度就越高。
usedCPUs是至關(guān)重要的,它主要負責(zé)改變動畫時CPU使用率。每調(diào)節(jié)不同的頻程不僅會改變云彩的細節(jié),更會影響CPU的使用率。當(dāng)usedCPUs設(shè)為2,云彩看起來太光滑而不真實;改為3,可以接受的,但效果不是太好。當(dāng)然,數(shù)值越大,占用CPU更多,從而動畫變慢,因此這里我們設(shè)置usedCPUs為5。
randSeed是算法的起點。我們隨機一個起點,只需一次便可在ENTER_FRAME持續(xù)發(fā)生,用于創(chuàng)造出移動參數(shù)的偏移量。
Stitch是使得PerlinNoise的圖像邊緣更近平滑。
typeNoise將它設(shè)置為真或假,用于改變Noise的性質(zhì)種類。
colorChannel指定Noise信號的顏色通道。1僅為紅色,3為紅和綠,7為紅綠藍,15為紅綠藍并帶alpha通道。
grayNoise用于設(shè)置灰色Noise,當(dāng)然如果選擇1,則為彩色Noise。
offset是一些點的數(shù)組。用于記錄水平和垂直方向的偏移量,以便控制云彩的運動。
再來談?wù)凜olorMatrixFilter方法。
在程序代碼中我們不再重復(fù)運算PerlinNoise,這是消耗CPU的根源所在。因為重復(fù)的圖案不會引人注意,因此云彩的移動才是關(guān)鍵,我們先可利用PerlinNoise的“stitch”參數(shù)來創(chuàng)建出一副圖像的無縫連接,然后通過BitmapData類中的scroll()方法實現(xiàn)即可。這種方法可完成連續(xù)的位圖數(shù)據(jù)的復(fù)制,并讓運動更加有效。
最后我們一起來對分層云彩,使之效果更加逼真。前面我們已經(jīng)創(chuàng)建了一個非常不錯的效果。我們增加簡單的分層ScrollingClouds可實現(xiàn)三維方式的云彩效果,通過調(diào)節(jié)alpha層為頂層,在對構(gòu)造函數(shù)中useBackground變量進行設(shè)置其參數(shù)為1后,便能將透明背景的效果最終呈現(xiàn)出來了。
參考文獻
[1] Roger·Braunstein.ActionScript3.0寶典.清華大學(xué)出版社,2012.