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