好了,閑話不說,介紹一下思路先.
我們的思路是:場景里一共有四個MC.最下面一層用做相框,不會用到,我們設深度為0;中間兩層是真正要顯示的圖畫,分別設深度為1,2,我們用"上層","下層"來代表. 頂層是遮罩,也是方塊效果的關鍵.我們設為3.
既然遮罩層是關鍵,我們就先說它.
這個做為遮罩的MC是用AS建的一個空MC,名兒為mcMask,在mcMask里復制了10*10個并排無隙的小方塊,(當然,在實際的代碼中可以看到,我把寬和長分開了的,所以實際上可以是長方形,這里只是為了敘述方便).
我們的目的是讓這些小方塊被隨機地清除,直到全部被清除掉,由于mcMask是上層圖畫的遮罩,故該圖也就"方塊化"地消失了,下層等長寬(我們把圖設為等長寬,這些方便一點,也美觀一點兒)的圖畫也就"方塊化"地顯現(xiàn)了. 當方塊全部清除后,我們把下層的圖畫提高到上層,再復制另一幅圖畫到下層,做一次循環(huán).這就達到一種周而復始的效果.
下面我講講代碼的編寫您就明白了.
主場景中共有三幀代碼.第一幀是對一些對象和變量初始化:
_global.k = 2;//決定圖畫的復制.
_global.xpos = 135;//決定圖畫的橫坐標.
_global.ypos = 135;//決定圖畫的橫坐標.
attachMovie("mc"+3, "mc"+3, 2);//復制初始狀態(tài)下上層的圖畫.(希望"上層"這個詞您不會產(chǎn)生歧義)
with (eval("mc"+3)) {
_x = xpos;
_y = ypos;
}
attachMovie("border", "border", 0);//復制相框.放在底層.
with (border) {
_x = xpos;
_y = ypos;
}
_root.createEmptyMovieClip("mcMask", 3);//生成遮罩層,下一幀我們將在里面復制小方塊.
with (mcMask) {
_x = xpos;
_y = ypos;
}
eval("mc3").setMask(mcMask);//初始狀態(tài)下的設定遮罩,注意被遮罩的對象.
_global.xW = (eval("mc"+3)._width)/10;//確定小方塊的長.
_global.yH = (eval("mc"+3)._height)/10;//確定小方塊的高.上的面全局全量在下一幀都會有更詳細說明.
可以看到,我們聲明了一些全局變量和MC.如果您對它們的用途有疑問,不用擔心,呆會兒我們就會講到.
第二幀代碼:
attachMovie("mc"+k, "mc"+k, 1);//復制下層的MC.
with (eval("mc"+k)) {
_x = xpos;
_y = ypos;
}
for (i=0; i<100; i++) {//在mcMask,也就是遮罩層里復制小方塊.
mcMask.attachMovie("mcM", "mcM"+i, i);
with (mcMask["mcM"+i]) {
_width = xW;
_height = yH;
_x = (i%10-4.5)*xW;//如此決定的坐標值,小方塊集合的幾何中心就是mcMask的中心點.
_y = (Math.floor(i/10)-4.5)*yH;
}
}
_global.randomKdiffer = function(n, m, k) {//隨機函數(shù),目的是在n~m之間生成k個互異的數(shù),放到數(shù)組arrayK中.
arrayK = [];
var i = 0;
while (i
a = random(m-n+1)+n; for (var j = 0; j
if (a == arrayK[j]) {
break;
}
} if (j == i) {
arrayK[i] = a;
i++;
} }
return arrayK;
};
function maskT() {//主要的函數(shù).在第三幀里面會用setInterval調(diào)用.
var a = [];
a = randomKdiffer(0, 99, 10);//找到十個隨機數(shù),為的是下一步清除對應的小方塊.
for (var i = 0; i<10; i++) {//一次性清除十個隨機的方塊,
mcMask["mcM"+a[i]].removeMovieClip();
}
for (j=0; j<100; j++) {//判斷小方塊是否全被清除.
if (_root.mcMask["mcM"+j] != undefined) {
break;
}
}
if (j>=100) {//如果全被清除,則重新定義對象和變量值.
clearInterval(_root.maskMc);//把清除時間間隔變量(在下一幀中).
_root["mc"+k].swapDepths(2);//重新把下層的MC深度提到上層.
k--;//控制MC復制的k值減少1,表示再一次復制的時候就復制后一個MC.
if (k<1) {//如果k值小于1,就從3開始重新循環(huán).并重新把下層的MC(已提高到上層)定義為被遮罩層.
k = 3;
eval("mc"+1).setMask(mcMask);
} else {
eval("mc"+(k+1)).setMask(mcMask);
}
_root.gotoAndPlay(2);//跳到第二幀重新執(zhí)行.
}
}
這一幀主要是先定義下層的MC,因為上一層的MC在前一次循環(huán)時已經(jīng)定義過了(初始化由第一幀代碼完成),并且在最后(當小方塊全消失時,原來的上層已經(jīng)不可見,這時下層提升到上層,外觀上看不出來)提升到上層且被定義為被遮罩.遮罩層的小方塊可以看到又重新生成了,所以我拉看到的仍是前一次循環(huán)的下層圖畫.再經(jīng)歷一次循環(huán),利用k值的循環(huán)遞減,我們可以不斷地復制下層的圖畫,達到周而復始的效果.只要理解了k的作用,其它的也就好懂了.注意第二幀我們復制的深度是1,代表下層.到了小方塊全部清除時才提升到2.第三幀就是讓時間頭停下,間隔0.2秒執(zhí)行maskT函數(shù).因為一次清除十個MC(這里有重復也不用擔心).
所以看起來就是方塊隨機消失,而消失完后,又返回第二幀開始新的一輪.這一幀是循環(huán)的保障.其它的幾個全局變量是為了更好地控制圖片的位置和尺寸的. 我們可以更改圖片的尺寸而不需要改代碼. 不過有一點要注意,各圖片最好是一樣大小.不過,就代碼的特點來看,我們也可以把圖片設為不同的尺寸,只要稍微改動一下就行了.這里就留給大家自己思考了.如果要加入更多的圖片,只要把鏈接名稱命名為"mc"+i(i=1,2,3...)就行了,相應地修改k的循環(huán)判斷值.