最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442
当前位置:首页 > 网络设计学院 > Flash教程

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

日期:11-23    来源:中国设计秀    作者:cnwebshow.com

PowrePoint里面很常用的效果,我说不出名字,姑且叫"马赛克渐变"效果吧. 就是图片方格化退去,显出另一幅图画.另一幅图画过了一会儿又方格化退去,显示下一张.如此循环.大家可以看看我的源文件先.里面用了三幅图.这个效果很实用,.您可以用在LOGO上或企业的产品宣传上,简单美观. fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  好了,闲话不说,介绍一下思路先. fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  我们的思路是:场景里一共有四个MC.最下面一层用做相框,不会用到,我们设深度为0;中间两层是真正要显示的图画,分别设深度为1,2,我们用"上层","下层"来代表. 顶层是遮罩,也是方块效果的关键.我们设为3. fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  既然遮罩层是关键,我们就先说它. fpM中国设计秀
fpM中国设计秀
  这个做为遮罩的MC是用AS建的一个空MC,名儿为mcMask,在mcMask里复制了10*10个并排无隙的小方块,(当然,在实际的代码中可以看到,我把宽和长分开了的,所以实际上可以是长方形,这里只是为了叙述方便). fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  我们的目的是让这些小方块被随机地清除,直到全部被清除掉,由于mcMask是上层图画的遮罩,故该图也就"方块化"地消失了,下层等长宽(我们把图设为等长宽,这些方便一点,也美观一点儿)的图画也就"方块化"地显现了. 当方块全部清除后,我们把下层的图画提高到上层,再复制另一幅图画到下层,做一次循环.这就达到一种周而复始的效果. fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  下面我讲讲代码的编写您就明白了. fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  主场景中共有三帧代码.第一帧是对一些对象和变量初始化: fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  _global.k = 2;//决定图画的复制. fpM中国设计秀
fpM中国设计秀
  _global.xpos = 135;//决定图画的横坐标. fpM中国设计秀
fpM中国设计秀
  _global.ypos = 135;//决定图画的横坐标. fpM中国设计秀
fpM中国设计秀
  attachMovie("mc"+3, "mc"+3, 2);//复制初始状态下上层的图画.(希望"上层"这个词您不会产生歧义) fpM中国设计秀
fpM中国设计秀
  with (eval("mc"+3)) { fpM中国设计秀
fpM中国设计秀
   _x = xpos; fpM中国设计秀
fpM中国设计秀
   _y = ypos; fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  attachMovie("border", "border", 0);//复制相框.放在底层. fpM中国设计秀
fpM中国设计秀
  with (border) { fpM中国设计秀
fpM中国设计秀
   _x = xpos; fpM中国设计秀
fpM中国设计秀
   _y = ypos; fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  _root.createEmptyMovieClip("mcMask", 3);//生成遮罩层,下一帧我们将在里面复制小方块. fpM中国设计秀
fpM中国设计秀
  with (mcMask) { fpM中国设计秀
fpM中国设计秀
   _x = xpos; fpM中国设计秀
fpM中国设计秀
   _y = ypos; fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  eval("mc3").setMask(mcMask);//初始状态下的设定遮罩,注意被遮罩的对象. fpM中国设计秀
fpM中国设计秀
  _global.xW = (eval("mc"+3)._width)/10;//确定小方块的长. fpM中国设计秀
fpM中国设计秀
  _global.yH = (eval("mc"+3)._height)/10;//确定小方块的高.上的面全局全量在下一帧都会有更详细说明. fpM中国设计秀
fpM中国设计秀
  fpM中国设计秀

可以看到,我们声明了一些全局变量和MC.如果您对它们的用途有疑问,不用担心,呆会儿我们就会讲到. fpM中国设计秀
fpM中国设计秀
  第二帧代码: fpM中国设计秀
fpM中国设计秀
   fpM中国设计秀
fpM中国设计秀
  attachMovie("mc"+k, "mc"+k, 1);//复制下层的MC. fpM中国设计秀
fpM中国设计秀
  with (eval("mc"+k)) { fpM中国设计秀
fpM中国设计秀
   _x = xpos; fpM中国设计秀
fpM中国设计秀
   _y = ypos; fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  for (i=0; i<100; i++) {//在mcMask,也就是遮罩层里复制小方块. fpM中国设计秀
fpM中国设计秀
   mcMask.attachMovie("mcM", "mcM"+i, i); fpM中国设计秀
fpM中国设计秀
   with (mcMask["mcM"+i]) { fpM中国设计秀
fpM中国设计秀
   _width = xW; fpM中国设计秀
fpM中国设计秀
   _height = yH; fpM中国设计秀
fpM中国设计秀
   _x = (i%10-4.5)*xW;//如此决定的坐标值,小方块集合的几何中心就是mcMask的中心点. fpM中国设计秀
fpM中国设计秀
   _y = (Math.floor(i/10)-4.5)*yH; fpM中国设计秀
fpM中国设计秀
   } fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  _global.randomKdiffer = function(n, m, k) {//随机函数,目的是在n~m之间生成k个互异的数,放到数组arrayK中. fpM中国设计秀
fpM中国设计秀
  arrayK = []; fpM中国设计秀
fpM中国设计秀
  var i = 0; fpM中国设计秀
fpM中国设计秀
  while (i fpM中国设计秀
    a = random(m-n+1)+n; for (var j = 0; j fpM中国设计秀
    if (a == arrayK[j]) { fpM中国设计秀
fpM中国设计秀
     break; fpM中国设计秀
fpM中国设计秀
   } fpM中国设计秀
fpM中国设计秀
   } if (j == i) { fpM中国设计秀
fpM中国设计秀
   arrayK[i] = a; fpM中国设计秀
fpM中国设计秀
   i++; fpM中国设计秀
fpM中国设计秀
   } } fpM中国设计秀
fpM中国设计秀
   return arrayK; fpM中国设计秀
fpM中国设计秀
  }; fpM中国设计秀
fpM中国设计秀
  function maskT() {//主要的函数.在第三帧里面会用setInterval调用. fpM中国设计秀
fpM中国设计秀
  var a = []; fpM中国设计秀
fpM中国设计秀
  a = randomKdiffer(0, 99, 10);//找到十个随机数,为的是下一步清除对应的小方块. fpM中国设计秀
fpM中国设计秀
  for (var i = 0; i<10; i++) {//一次性清除十个随机的方块, fpM中国设计秀
fpM中国设计秀
   mcMask["mcM"+a[i]].removeMovieClip(); fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  for (j=0; j<100; j++) {//判断小方块是否全被清除. fpM中国设计秀
fpM中国设计秀
   if (_root.mcMask["mcM"+j] != undefined) { fpM中国设计秀
fpM中国设计秀
   break; fpM中国设计秀
fpM中国设计秀
   } fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  if (j>=100) {//如果全被清除,则重新定义对象和变量值. fpM中国设计秀
fpM中国设计秀
   clearInterval(_root.maskMc);//把清除时间间隔变量(在下一帧中). fpM中国设计秀
fpM中国设计秀
   _root["mc"+k].swapDepths(2);//重新把下层的MC深度提到上层. fpM中国设计秀
fpM中国设计秀
   k--;//控制MC复制的k值减少1,表示再一次复制的时候就复制后一个MC. fpM中国设计秀
fpM中国设计秀
   if (k<1) {//如果k值小于1,就从3开始重新循环.并重新把下层的MC(已提高到上层)定义为被遮罩层. fpM中国设计秀
fpM中国设计秀
   k = 3; fpM中国设计秀
fpM中国设计秀
   eval("mc"+1).setMask(mcMask); fpM中国设计秀
fpM中国设计秀
   } else { fpM中国设计秀
fpM中国设计秀
   eval("mc"+(k+1)).setMask(mcMask); fpM中国设计秀
fpM中国设计秀
   } fpM中国设计秀
fpM中国设计秀
   _root.gotoAndPlay(2);//跳到第二帧重新执行. fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  } fpM中国设计秀
fpM中国设计秀
  这一帧主要是先定义下层的MC,因为上一层的MC在前一次循环时已经定义过了(初始化由第一帧代码完成),并且在最后(当小方块全消失时,原来的上层已经不可见,这时下层提升到上层,外观上看不出来)提升到上层且被定义为被遮罩.遮罩层的小方块可以看到又重新生成了,所以我拉看到的仍是前一次循环的下层图画.再经历一次循环,利用k值的循环递减,我们可以不断地复制下层的图画,达到周而复始的效果.只要理解了k的作用,其它的也就好懂了.注意第二帧我们复制的深度是1,代表下层.到了小方块全部清除时才提升到2.第三帧就是让时间头停下,间隔0.2秒执行maskT函数.因为一次清除十个MC(这里有重复也不用担心).