用程序?qū)崿F(xiàn)的天氣效果之鵝毛大雪
天氣效果是很多網(wǎng)頁設(shè)計(jì)師必學(xué)必做的一個(gè)技能,其中雪花效果在實(shí)際作品中非常常見。如果使用時(shí)間軸動(dòng)畫來實(shí)現(xiàn)這個(gè)效果,會(huì)非常麻煩,因?yàn)殡S機(jī)性無法控制,而且每次都是一樣的效果。但是,如果用編程來實(shí)現(xiàn),就會(huì)簡(jiǎn)單
天氣效果是很多網(wǎng)頁設(shè)計(jì)師必學(xué)必做的一個(gè)技能,其中雪花效果在實(shí)際作品中非常常見。如果使用時(shí)間軸動(dòng)畫來實(shí)現(xiàn)這個(gè)效果,會(huì)非常麻煩,因?yàn)殡S機(jī)性無法控制,而且每次都是一樣的效果。但是,如果用編程來實(shí)現(xiàn),就會(huì)簡(jiǎn)單得多。
首先,我們新建一個(gè)空白的文檔,設(shè)置幀頻為30fps。
導(dǎo)入背景圖和繪制雪花
接下來,導(dǎo)入一張背景圖,為了突出白色的雪花效果,選擇與白色對(duì)比明顯的顏色為佳。例如,我們可以選擇一張紅色喜慶的圖像。
然后,我們需要手動(dòng)繪制一個(gè)雪花的影片剪輯,之后的代碼將根據(jù)這個(gè)影片剪輯復(fù)制生成多個(gè)不同大小形態(tài)的雪花在舞臺(tái)上。繪制的方法主要是利用徑向漸變,從白色到透明的白色,這樣就會(huì)產(chǎn)生邊緣模糊的效果。由于雪花在視覺上可能不是絕對(duì)的圓形,所以我們可以將它做成橢圓形。
編寫代碼實(shí)現(xiàn)雪花效果
在主時(shí)間軸上新建一個(gè)AS層,并添加以下代碼:
var total:int 100; // 雪花總數(shù)
var max:int 1; // 最大尺寸
var min:Number 0.18; // 最小尺寸
var snowList:Array []; // 雪花數(shù)組
var w:Number ;
var h:Number ;
// 創(chuàng)建雪花
createSnow();
startMoveSnow();
// 建立雪花
function createSnow():void {
for (var i:int 0; i < total; i ) {
var snow_mc:SnowItem new SnowItem();
snow_mc.x Math.floor(Math.random() * w);
snow_mc.y Math.floor(Math.random() * h);
snow_ snow_ Math.random() * (max - min) min;
snow_ Math.random() * 0.8 0.2;
snow_mc["yspeed"] Math.floor(Math.random() * 2 6);
snow_mc["xspeed"] -0.036 Math.random() * 0.06;
snow_mc["radian"] 0;
snow_ Math.random() * 360;
(snow_mc);
snowList.push(snow_mc);
}
}
// 控制雪花降落
function startMoveSnow():void {
(Event.ENTER_FRAME, moveSonw);
}
function moveSonw(e:Event):void {
for (var i:int 0; i < total; i ) {
var mSnow:SnowItem snowList[i] as SnowItem;
mSnow["radian"] mSnow["xspeed"] * 2;
mSnow.x (mSnow["radian"]) * 2;
mSnow.y mSnow["yspeed"];
if (mSnow.y > h || mSnow.x > w || mSnow.x < 0) {
mSnow.y -10;
mSnow.x -10 Math.floor(Math.random() * (w 10));
Math.random() * 360;
}
}
}
運(yùn)行代碼,你就可以看到“鵝毛大雪”的效果啦!