源文件下載
我們先看一個(gè)效果,如下圖:
點(diǎn)擊查看動(dòng)畫效果<
思考方法
很顯然,我們用到了一個(gè)mc對(duì)另外一個(gè)mc的遮罩。它的原理是:在作為遮罩片的mc中,復(fù)制部分小方塊mc,并且隨機(jī)放置這些小方塊mc。當(dāng)然,這樣的隨機(jī)放置不是任意的,必須滿足兩個(gè)條件:放置的位置不重復(fù);能夠完全遮罩圖形。這里的方法是:
1、計(jì)算小方塊mc在作為遮罩片mc中順序放置的位置的坐標(biāo);
2 、把放置小方塊mc的坐標(biāo)存放入一個(gè)數(shù)組,使這個(gè)數(shù)組的每一個(gè)元素都包括兩個(gè)數(shù)值(橫坐標(biāo),縱坐標(biāo))。因此,這個(gè)數(shù)組包括了小方塊所有的放置的位置。這里,我們要用到2維數(shù)組的有關(guān)知識(shí);
3、復(fù)制小方塊mc,每復(fù)制一個(gè)mc,從2維數(shù)組中隨機(jī)選一個(gè)元素,把這個(gè)元素中的橫坐標(biāo)和縱坐標(biāo)分別賦給這個(gè)mc。
例題
打開源文件3.8.fla,在第2層的元件1內(nèi)的第1幀上的腳本為:
this.zfx_mc._visible = false;
var temp_arry = new Array();//定義數(shù)組temp
for (i=0; i<=14; i++) {//注意理解雙重循環(huán)時(shí)執(zhí)行順序
//從上到下共15行小正方形是20*20,圖片面積是400*300
for (j=0; j<=19; j++) { //從左到右20列;
temp_arry.push([-190+20*j, -140+20*i]);
//把橫坐標(biāo)和縱坐標(biāo)數(shù)值作為一個(gè)元素,加入數(shù)組temp_arry.
}
}
i = 0; //設(shè)置變量i=0;
_root.attachMovie("tu", "tu", 500);
//從庫中鏈接元件“tu”,鏈接到舞臺(tái)的名稱為“tu”,深度為500
_root.tu._x = 200;//把“tu”擺放在舞臺(tái)中央
_root.tu._y = 150;
_root.tu.setMask(this);//設(shè)置本影片剪輯為遮罩,“tu”為被遮罩。
this.onEnterFrame = function() {//本影片剪輯執(zhí)行事件處理函數(shù);
duplicateMovieClip(this.zfx_mc, "zfx"+i, i);
//復(fù)制本影片剪輯下的zfx_mc,復(fù)制后的名稱為"zfx"+i,深度為i;
k = Math.floor(Math.random()*temp_arry.length);
//在數(shù)組temp_arry中隨機(jī)選出一個(gè)元素的序號(hào)k
this["zfx"+i]._x = temp_arry[k][0];
//把在數(shù)組temp_arry中第k個(gè)元素的第1個(gè)值作為this["zfx"+i]的橫坐標(biāo);
this["zfx"+i]._y = temp_arry[k][1];
//把在數(shù)組temp_arry中第k個(gè)元素的第2個(gè)值作為this["zfx"+i]的縱坐標(biāo);
temp_arry.splice(k, 1);//把數(shù)組temp_arry中第k個(gè)元素刪掉;
i++;
if (i == 300) {//一共需要復(fù)制300個(gè)mc
delete this.onEnterFrame;//刪除本影片剪輯事件處理函數(shù),釋放內(nèi)存。
}
};
另外,小正方形zfx_mc有60幀的運(yùn)動(dòng)補(bǔ)間,在60幀上有個(gè):stop()
查看全套"Flash AS 高級(jí)教程"