论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

位图飘动

文章类别:Flash | 发表日期:2008-9-21 20:07:27

  这个效果呢,其实也简单,我大致说一下原理。
先自动生成一矩形元件。
_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<num; 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<num; i++) {
duplicateMovieClip(img, "img"+i, lv++);
}
//把每一个矩形,设成相应的图片的遮罩。
for (i=0; i<num; i++) {
show.road["img"+i].setMask(_root["rec"+i]);
}
这时候,就成了,一个矩形遮罩一个图片,每个图片都成了窄窄的一条,一字排开,你一点也看出有缝隙,还是一张吗,呵呵。
然后,我们让这里图片,有规律的运动,就行了。
show.road.onEnterFrame = function() {
for (i=0; i<num; 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;
};
我不知道大家是否看得懂。反正我写的也有些乱。

不如这样,反正咱们是要得到结果的。我只接把这个类的内容全贴上,里面写有注释的。高手看得懂的,帮忙改进,看不懂的菜鸟,抓紧时间

学习。
以下是类的内容:
class show {
//wn是波动速度
static var wn:Number = 0;
//表示深度的变量
var lv:Number = 1;
//原始图像的实例名
static var img:MovieClip;
static var road:MovieClip;
function show(mc, path) {
road = path == null ? _root : path;
img = mc;
//把原始图像设为不可见
img._visible = false;
}
function wave(num:Number, speed:Number, A:Number) {
num = num == null ? 50 : num;
speed = speed == null ? 50 : speed;
A = A == null ? 3 : A;
var i: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<num; 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<num; i++) {
duplicateMovieClip(img, "img"+i, lv++);
}
//把每一个矩形,设成相应的图片的遮罩。
for (i=0; i<num; i++) {
show.road["img"+i].setMask(_root["rec"+i]);
}
//
//下面的,是让位图元件,逐有规律的波动,
show.road.onEnterFrame = function() {
for (i=0; i<num; 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,把位图设为上下居中,但是左侧和中心对齐,这样效果较好。
然后,回到主场景,在第一帧写入如下:
var mm = new show(_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
视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058