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