国产黄色免费网站,人人干人人干人人干,免费大黄网站在线看,国产情侣一区二区三区,99精品国产福利免费一区二区,国产亚洲成归v人片在线观看,伊人88

2023信創(chuàng)獨角獸企業(yè)100強
全世界各行各業(yè)聯(lián)合起來,internet一定要實現(xiàn)!

在flash中實現(xiàn)場景轉(zhuǎn)換中的馬賽克效果

2004-02-12 eNet&Ciweek

  PowrePoint里面很常用的效果,我說不出名字,姑且叫"馬賽克漸變"效果吧. 就是圖片方格化退去,顯出另一幅圖畫.另一幅圖畫過了一會兒又方格化退去,顯示下一張.如此循環(huán).大家可以看看我的源文件先.里面用了三幅圖.這個效果很實用,.您可以用在LOGO上或企業(yè)的產(chǎn)品宣傳上,簡單美觀.

  

  好了,閑話不說,介紹一下思路先.

  

  我們的思路是:場景里一共有四個MC.最下面一層用做相框,不會用到,我們設(shè)深度為0;中間兩層是真正要顯示的圖畫,分別設(shè)深度為1,2,我們用"上層","下層"來代表. 頂層是遮罩,也是方塊效果的關(guān)鍵.我們設(shè)為3.

  

  既然遮罩層是關(guān)鍵,我們就先說它.

  這個做為遮罩的MC是用AS建的一個空MC,名兒為mcMask,在mcMask里復(fù)制了10*10個并排無隙的小方塊,(當(dāng)然,在實際的代碼中可以看到,我把寬和長分開了的,所以實際上可以是長方形,這里只是為了敘述方便).

  

  我們的目的是讓這些小方塊被隨機地清除,直到全部被清除掉,由于mcMask是上層圖畫的遮罩,故該圖也就"方塊化"地消失了,下層等長寬(我們把圖設(shè)為等長寬,這些方便一點,也美觀一點兒)的圖畫也就"方塊化"地顯現(xiàn)了. 當(dāng)方塊全部清除后,我們把下層的圖畫提高到上層,再復(fù)制另一幅圖畫到下層,做一次循環(huán).這就達到一種周而復(fù)始的效果.

  

  下面我講講代碼的編寫您就明白了.

  

  主場景中共有三幀代碼.第一幀是對一些對象和變量初始化:

  

  _global.k = 2;//決定圖畫的復(fù)制.

  _global.xpos = 135;//決定圖畫的橫坐標(biāo).

  _global.ypos = 135;//決定圖畫的橫坐標(biāo).

  attachMovie("mc"+3, "mc"+3, 2);//復(fù)制初始狀態(tài)下上層的圖畫.(希望"上層"這個詞您不會產(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è)定遮罩,注意被遮罩的對象.

  _global.xW = (eval("mc"+3)._width)/10;//確定小方塊的長.

  _global.yH = (eval("mc"+3)._height)/10;//確定小方塊的高.上的面全局全量在下一幀都會有更詳細(xì)說明.

  

  
  可以看到,我們聲明了一些全局變量和MC.如果您對它們的用途有疑問,不用擔(dān)心,呆會兒我們就會講到.

  第二幀代碼:

  

  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的中心點.

   _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ù),為的是下一步清除對應(yīng)的小方塊.

  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復(fù)制的k值減少1,表示再一次復(fù)制的時候就復(fù)制后一個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)定義過了(初始化由第一幀代碼完成),并且在最后(當(dāng)小方塊全消失時,原來的上層已經(jīng)不可見,這時下層提升到上層,外觀上看不出來)提升到上層且被定義為被遮罩.遮罩層的小方塊可以看到又重新生成了,所以我拉看到的仍是前一次循環(huán)的下層圖畫.再經(jīng)歷一次循環(huán),利用k值的循環(huán)遞減,我們可以不斷地復(fù)制下層的圖畫,達到周而復(fù)始的效果.只要理解了k的作用,其它的也就好懂了.注意第二幀我們復(fù)制的深度是1,代表下層.到了小方塊全部清除時才提升到2.第三幀就是讓時間頭停下,間隔0.2秒執(zhí)行maskT函數(shù).因為一次清除十個MC(這里有重復(fù)也不用擔(dān)心).

  

  所以看起來就是方塊隨機消失,而消失完后,又返回第二幀開始新的一輪.這一幀是循環(huán)的保障.其它的幾個全局變量是為了更好地控制圖片的位置和尺寸的. 我們可以更改圖片的尺寸而不需要改代碼. 不過有一點要注意,各圖片最好是一樣大小.不過,就代碼的特點來看,我們也可以把圖片設(shè)為不同的尺寸,只要稍微改動一下就行了.這里就留給大家自己思考了.如果要加入更多的圖片,只要把鏈接名稱命名為"mc"+i(i=1,2,3...)就行了,相應(yīng)地修改k的循環(huán)判斷值.

  
源文件


  

相關(guān)頻道: eNews

您對本文或本站有任何意見,請在下方提交,謝謝!

投稿信箱:tougao@enet16.com