这个效果呢,其实也简单,我大致说一下原理。
先自动生成一矩形元件。
_root.createEmptyMovieClip("rec",lv++);
with(_root.rec){
beginFill(0x000000,100);
moveTo(0,0);
lineTo(0,100);
lineTo(100,100);
lineTo(100,0);
lineTo(0,0);
endFill();
_visible=false;
_y=0;
_height=800;
}//上面生的那个矩形,再复制若干份,num是份数,会有具体设定。
for(i=0;i
duplicateMovieClip("rec","rec"+i,lv++);
//让这些矩形按规律排开,恰好盖住图片
show.road["rec"+i]._x=img._x+img._width/num*i;
show.road["rec"+i]._width=img._width/num;
}//把要实现效果的图片,再复制若干份,num是份数
for(i=0;i
duplicateMovieClip(img,"img"+i,lv++);
}//把每一个矩形,设成相应的图片的遮罩。
for(i=0;i
show.road["img"+i].setMask(_root["rec"+i]);
}这时候,就成了,一个矩形遮罩一个图片,每个图片都成了窄窄的一条,一字排开,你一点也看出有缝隙,还是一张吗,呵呵。
然后,我们让这里图片,有规律的运动,就行了。
show.road.onEnterFrame=function(){
for(i=0;i
with(show.road["img"+i]){
//这里用到了三角函数sin()。
_alpha=_xscale=_yscale=(100-A)+A*Math.sin(show.wn+i*2*Math.PI/num);
}
}
show.wn+=speed;
};我不知道大家是否看得懂。反正我写的也有些乱。
不如这样,反正咱们是要得到结果的。我只接把这个类的内容全贴上,里面写有注释的。高手看得懂的,帮忙改进,看不懂的菜鸟,抓紧时间
学习。
以下是类的内容:
classshow{
//wn是波动速度
staticvarwn:Number=0;
//表示深度的变量
varlv:Number=1;
//原始图像的实例名
staticvarimg:MovieClip;
staticvarroad:MovieClip;
functionshow(mc,path){
road=path==null?_root:path;
img=mc;
//把原始图像设为不可见
img._visible=false;
}
functionwave(num:Number,speed:Number,A:Number){
num=num==null?50:num;
speed=speed==null?50:speed;
A=A==null?3:A;
vari:Number;
//凭空生成了一个矩形元件,以用于遮罩
show.road.createEmptyMovieClip("rec",lv++);
with(show.road.rec){
beginFill(0x000000,100);
moveTo(0,0);
lineTo(0,100);
lineTo(100,100);
lineTo(100,0);
lineTo(0,0);
endFill();
_visible=false;
_y=0;
_height=800;
}
//上面生的那个矩形,再复制若干份,num是份数
for(i=0;i
duplicateMovieClip("rec","rec"+i,lv++);
show.road["rec"+i]._x=img._x+img._width/num*i;
show.road["rec"+i]._width=img._width/num;
}
//把要实现效果的图片,再复制若干份,num是份数
for(i=0;i
duplicateMovieClip(img,"img"+i,lv++);
}
//把每一个矩形,设成相应的图片的遮罩。
for(i=0;i
show.road["img"+i].setMask(_root["rec"+i]);
}
//
//下面的,是让位图元件,逐有规律的波动,
show.road.onEnterFrame=function(){
for(i=0;i
with(show.road["img"+i]){
_alpha=_xscale=_yscale=(100-A)+A*Math.sin(show.wn+i*2*Math.PI/num);
}
}
show.wn+=speed;
};
}
}把下面复制下来,保存成show.as。
然后,建一个
Flash文件。它要和show.as在同一目录。
导入一个图片,把这个图片转成一个影片剪辑,并起外实例名,就起个“img”吧。
打开这个MC,把位图设为上下居中,但是左侧和中心对齐,这样效果较好。
然后,回到主场景,在第一帧写入如下:
varmm=newshow(_root.img);
mm.wave();测试影片,这样效果就出来了。
wave()还有一些参数,我大致说一下吧
在
Flash中,我有注释的。如下
show类
构造方法:
var name=new show(mc, [path])
参数:
mc:要操作的元件实例名。不可缺省
path:此元件所在的完整路径,缺省值是_root.
<>内有一个方法
一、wave([num:Number], [speed:Number], [A:Number])
说明:使元件(如位图)旗帜飘动
参数:
num:把元件分割成多少块,越多则越逼真,但速度越慢,
最好是能被位图宽度整除的数(如位图宽度为400,可以取40,80,50等)。缺省值为50
speed:位图抖动的速度,缺省值为50
A:波幅,值越大,抖动幅度越大,缺省为3