Flash AS教程:用动态遮罩实现液化效果

2016-01-29 12:22 18 1 收藏

Flash AS教程:用动态遮罩实现液化效果,本例介绍运用Flash AS的动态遮罩来实现液化效果,教程详细讲解了AS代码的运用,并给出了详细的代码解释,希望能给朋友们带来帮助~~

【 tulaoshi.com - Flash 】

本文由中国 sanbos 原创,转载请保留此信息! 

先看效果:将鼠标在图片上移动看看效果。

[next]

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

制作方法:

1. 新建flash文档,将帧频调到31.导入一张图片。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

2. 新建一影片剪辑,将图片拖入。然后回到主场景,将该MC放到舞台上,居中对齐。打开属性面板实例名称设为:pic_mc.

3. 新建一影片剪辑,用椭园工具画一个无笔触任一填充的园,这个园应该覆盖图片的大部分。

回到主场景,新建一层,将库中的园元件拖上舞台。打开属性面板,实例名称为:mask_mc.将这一层拖到图片层的下面。

4. 新建一层,取名为action,输入下列代码:

this.createEmptyMovieClip("theScene", this.getNextHighestDepth());
var maxImages:Number = 20;
dupeAndPlace = function (image:MovieClip):Object {
var arrHolder:Object = new Object();
arrHolder.pics_arr = new Array(0);
arrHolder.masks_arr = new Array(0);
for (var i = 1; i<maxImages; i++) {
var dnm = "image" + i;
var mnm = "mask" + i;
var imgObj = {_x:image._x, _y:image._y, _xscale:100+(i*1.7), _yscale:100+(i*1.7)};
var maskObj = {_xscale:Math.floor(100/i+3), _yscale:Math.floor(100/i+3), _x:this._xmouse, _y:this._ymouse};
var theDupedImage = image.duplicateMovieClip(dnm, theScene.getDepth()+ i, imgObj);
var theDupedMask = mask_mc.duplicateMovieClip(mnm, theScene.getDepth()+(i*50), maskObj);
theDupedImage.setMask(theDupedMask);
arrHolder.pics_arr.push(theDupedImage);
arrHolder.masks_arr.push(theDupedMask);
}
mask_mc._visible = false;
return arrHolder;
};
makeWaves = function (masks_arr:Array) {
for (var i = masks_arr.length; i0; i--) {
masks_arr[i]._x += (this._xmouse-masks_arr[i]._x)/maxImages*i;
masks_arr[i]._y += (this._ymouse-masks_arr[i]._y)/maxImages*i;
}
};
this.liquefyImage = function(theImage:MovieClip){
var arrHolder:Object = dupeAndPlace(theImage);
onEnterFrame = function(){
makeWaves(arrHolder.masks_arr);
}
}
pic_mc.onRollOver = function(){
liquefyImage(pic_mc);
}

OK,大功告成!
测试影片。

[next]

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

代码分析:

看到这个效果我们很可能想到虑镜,其实不然,这就是用遮罩实现的效果。原理并不复杂。若干个随鼠标运动的园型遮罩,下面也是若干个被遮罩的图片,遮罩和被遮罩大小都不断变化,从而实现了这个效果。
首先创建了一个空的MC,然后预设了一个数量,上面我们说到若干个,这里设为20。
this.createEmptyMovieClip("theScene", this.getNextHighestDepth());
var maxImages:Number = 20;
接下创建一个函数用来创建这些若干个遮照和图片。
dupeAndPlace = function (image:MovieClip):Object {
创建一个对象用来存放这些遮罩和图片。

var arrHolder:Object = new Object();
接下来创建两个数组一个用来存放图片,一个用来存放遮罩:

arrHolder.pics_arr = new Array(0);

arrHolder.masks_arr = new Array(0);
接下来用一个for循环来创建这些图片和遮罩:
for (var i = 1; i<maxImages; i++) {
用两个变量来代表图片和遮罩,这样一个循环下来,就产生了20个图片和遮罩,当然这时还没创建,只是产生了20个名称而已:
var dnm = "image" + i;

var mnm = "mask" + i;
接下来再创建两个对象,用来存放将要产生的遮罩和图片的属性:
var imgObj = {_x:image._x, _y:image._y, _xscale:100+(i*1.7), _yscale:100+(i*1.7)};

var maskObj = {_xscale:Math.floor(100/i+3), _yscale:Math.floor(100/i+3), _x:this._xmouse, _y:this._ymouse};
下面创建两个对象分别复制图片和遮罩,并将上面两个对象中存的属性赋给它们。
var theDupedImage = image.duplicateMovieClip(dnm, theScene.getDepth()+ i, imgObj);

var theDupedMask = mask_mc.duplicateMovieClip(mnm, theScene.getDepth()+(i*50), maskObj);
然后将遮罩应用于图片上:
theDupedImage.setMask(theDupedMask);
然后将遮罩和图片存到上面创建的数组中。
arrHolder.pics_arr.push(theDupedImage);

arrHolder.masks_arr.push(theDupedMask);
将舞台上的mask_mc元件隐藏。

mask_mc._visible = false;
返回存放这些遮罩和图片的对象:

return arrHolder;
上面这些动作都是在for循环中,因此,到现在就已创建了20对大小不一遮罩和图片,并且都被设置了遮罩和被遮罩的关系。
下面创建一个函数使这些遮罩向鼠标靠近:
makeWaves = function (masks_arr:Array) {

for (var i = masks_arr.length; i0; i--) {

masks_arr._x += (this._xmouse-masks_arr._x)/maxImages*i;

masks_arr._y += (this._ymouse-masks_arr._y)/maxImages*i;

}
};
创建一个函数用来执行上面创建的创建这些遮罩和图片的函数,并在每隔一帧时调用一次让遮罩靠近鼠标的函数:
this.liquefyImage = function(theImage:MovieClip){

var arrHolder:Object = dupeAndPlace(theImage);

onEnterFrame = function(){

makeWaves(arrHolder.masks_arr);

}
}
下面是当鼠标移过图片时调用上面这个函数:

pic_mc.onRollOver = function(){

liquefyImage(pic_mc);
}

对本文感兴趣的朋友可以到这里提交作业,老师会为作业点评、加分:http://bbs.jcwcn.com/viewthread.php?tid=212207

来源:https://www.tulaoshi.com/n/20160129/1485827.html

延伸阅读
标签: flash教程
本文由 中国 英子  原创,转载请保留此信息! 一般来说,一个具有遮罩效果的Flash作品,最后在时间轴里会显示出第几层是遮罩层和被遮罩层.而本例若象往常一样,制作结束时,点右键:遮罩层.则遮罩制作不成功. 演示: 点击下载源文件 看不到动画的朋友请去这里观看:http://bbs.jcwcn.com/viewt...
用WPS演示可以制作在PowerPoint中的动态效果,之所以选择它来制作动画效果,是因为WPS软件体积小容易安装,下面有个不错的动画制作过程,让我们亲眼目睹一下吧。 本例主要使用了动作路径来完成动画效果的制作,如有对动作路径的概念不了解的朋友可以参考下: 动作路径:指定对象或文本沿行的路径,它是幻灯片动画序列的一部分。它允许你在一...
标签: flash教程
二、闪动的方块 这个效果比较适合将其规则地排列在一角,或做成星状随机的出现在任何地方,这就看你自己的喜好了。制作中没有用到setProperty,而是通过随机数跳转到渐隐方块MC的某一帧来达到随机闪动的目的。 原文件下载学习 首先新建一个 Graphic (图形符号)命名为 changer_g, 选择矩形工具,按住 Shift 键画一个大...
标签: flash教程
三、随机跑动的箭头 这种效果是利用随机函数控制由左向右移动的MC的位置、大小和透明度来实现的。 原文件下载学习 首先,制作一个任意形状的 图形符号 (graphic)命名为 basic_g ,这里为了示意我们简单做了一个“>”符号,你可以仔细地绘制一个漂亮的箭头,效果会更好。 再新建一个 电影剪辑 (MovieClip)命名为 ba...
标签: flash教程
一、原文件下载 二、建立四个层,如下图所示 详细说明:在该教程中,要想通过下面的AS语句实现预览中的效果,需要设置四处坐标为(0,0)。 图1 [next] (1)分别设置圆、四倍图像在本元件(mask,large)中的X、Y坐标为(0,0)。如图:  [next] (2)将大小两个图片在场景上的位置坐标设定为(0,0),如图: [next] 三...

经验教程

87

收藏

84
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部