分享
 
 
 

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

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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<k) {

a = random(m-n+1)+n;

for (var j = 0; j<i; 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]].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开始重新循环.并重新把下层的MC

(已提高到上层)定义为被遮罩层.

k = 3;

eval("mc"+1).setMask(mcMask);

} else {

eval("mc"+(k+1)).setMask(mcMask);

}

_root.gotoAndPlay(2);//跳到第二帧重新执行.

}

}

这一帧主要是先定义下层的MC,因为上一层的MC在前一次循环时已经定义过了(初始化由第一帧代码完成),并且在最后(当小方块全消失时,原来的上层已经不可见,这时下层提升到上层,外观上看不出来)提升到上层且被定义为被遮罩.遮罩层的小方块可以看到又重新生成了,所以我拉看到的仍是前一次循环的下层图画.再经历一次循环,利用k值的循环递减,我们可以不断地复制下层的图画,达到周而复始的效果.只要理解了k的作用,其它的也就好懂了.注意第二帧我们复制的深度是1,代表下层.到了小方块全部清除时才提升到2.第三帧就是让时间头停下,间隔0.2秒执行maskT函数.因为一次清除十个MC(这里有重复也不用担心).

所以看起来就是方块随机消失,而消失完后,又返回第二帧开始新的一轮.这一帧是循环的保障.其它的几个全局变量是为了更好地控制图片的位置和尺寸的. 我们可以更改图片的尺寸而不需要改代码. 不过有一点要注意,各图片最好是一样大小.不过,就代码的特点来看,我们也可以把图片设为不同的尺寸,只要稍微改动一下就行了.这里就留给大家自己思考了.如果要加入更多的图片,只要把链接名称命名为"mc"+i(i=1,2,3...)就行了,相应地修改k的循环判断值.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有