快速业务通道

在flash中实现场景转换中的马赛克效果

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-10

  PowrePoint里面很常用的效果,我说不出名字,姑且叫"马赛克渐变"效果吧. 就是图片方格化退去,显出另一幅图画.另一幅图画过了一会儿又方格化退去,显示下一张.如此循环.大家可以看看我的源文件先.里面用了三幅图.这个效果很实用,.您可以用在LOGO上或企业的产品宣传上,简单美观.

  

  好了,闲话不说,介绍一下思路先.

  

  我们的思路是:场景里一共有四个MC.最下面一层用做相框,不会用到,我们设深度为0;中间两层是真正要显示的图画,分别设深度为1,2,我们用"上层","下层"来代表. 顶层是遮罩,也是方块效果的关键.我们设为3.

  

  既然遮罩层是关键,我们就先说它.

  这个做为遮罩的MC是用AS建的一个空MC,名儿为mcMask,在mcMask里复制了10*10个并排无隙的小方块,(当然,在实际的代码中可以看到,我把宽和长分开了的,所以实际上可以是长方形,这里只是为了叙述方便).

  

  我们的目的是让这些小方块被随机地清除,直到全部被清除掉,由于mcMask是上层图画的遮罩,故该图也就"方块化"地消失了,下层等长宽(我们把图设为等长宽,这些方便一点,也美观一点儿)的图画也就"方块化"地显现了. 当方块全部清除后,我们把下层的图画提高到上层,再复制另一幅图画到下层,做一次循环.这就达到一种周而复始的效果.

  

  下面我讲讲代码的编写您就明白了.

  

  主场景中共有三帧代码.第一帧是对一些对象和变量初始化:

  

  _global.k = 2;//决定图画的复制.

  _global.xpos = 135;//决定图画的横坐标.

  _global.ypos = 135;//决定图画的横坐标.

  attachMovie("mc"+3, "mc"+3, 2);//复制初始状态下上层的图画.(希望"上层"这个词您不会产生歧义)

  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);//初始状态下的设定遮罩,注意被遮罩的对象.

  _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) {//随机函数,目的是在n~m之间生成k个互异的数,放到数组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() {//主要的函数.在第三帧里面会用setInterval调用.

  var a = [];

  a = randomKdiffer(0, 99, 10);//找到十个随机数,为的是下一步清除对应的小方块.

  for (var i = 0; i<10; i++) {//一次性清除十个随机的方块,

   mcMask["mcM"+a[i]].r

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号