好文档 - 专业文书写作范文服务资料分享网站

Flash ActionScript2.0教程

天下 分享 时间: 加入收藏 我要投稿 点赞

getInstanceAtDepth()方法:这个方法将返回某个特定深度值上的MC实例。 比如要确定当前最大深度值的MC,可以用如下代码:

var zddepth = this.getNextHighestDepth()-1; //获得当前最大的深度值 var my_mc:MovieClip =this.getInstanceAtDepth(zddepth); getDepth()方法:返回某个MC的深度 比如要返回MC,my_mc的深度:

var mymcdepth = my_mc.getDepth();

swapDepths()方法:交换两个MC的深度值,如果MC正在执行补间,则补间会停止。 比如有两个MC:mc1和mc2,现在要交换这两个MC的深度 mc1.swapDepths(mc2);

下面通过一个练习来熟悉本节课所介绍的内容。 1.新建一flash文档,导入若干图片。

2.将这些图片分别做成MC,大小随意,但宽高不应超过200或可再小一些。在库中分别右击这些MC,点击“连接”,在弹出的面板中,在为ActionSpript导出前打钩。在标识框内输入:pic1.第二个MC则输入pic2,以此类推。

3.回到主场景,打开动作面板,输入下列代码:(注意下面的代码是以5张图片为例写的,如果你不是5张图片则应作相应修改,详细说明看后面的代码分析)

for(i=1;i<6;i++){

this.attachMovie(\var pic_mc = eval(\pic_mc._x = 150 +random(200); pic_mc._y = 100 + random(200); }

pic1_mc.onRelease = function(){

var zddepth =_root.getNextHighestDepth()-1;

var zd_mc:MovieClip =_root.getInstanceAtDepth(zddepth); this.swapDepths(zd_mc); }

pic2_mc.onRelease = function(){

var zddepth = _root.getNextHighestDepth()-1;

var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); this.swapDepths(zd_mc); }

pic3_mc.onRelease = function(){

var zddepth = _root.getNextHighestDepth()-1;

var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); this.swapDepths(zd_mc); }

pic4_mc.onRelease = function(){

var zddepth = _root.getNextHighestDepth()-1;

var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); this.swapDepths(zd_mc); }

pic5_mc.onRelease = function(){

var zddepth = _root.getNextHighestDepth()-1;

var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth); this.swapDepths(zd_mc); }

代码分析:

首先用一个for循环,将库中的图片加载到舞台上,循环次数是你的图片元件的数量,下面i<6中的6用你的图片元件数量加1替换。我这里是5张图片,所以我用6。

for(i=1;i<6;i++){

接下来加载这些图片元件,这里加载的深度我们用到了this.getNextHighestDepth()方法。图片加载后指定图片的x,y坐标在一定的范围内随机的位置。这个范围应根据图片元件的大小来确定,不能太小,太小了,上面的图片会完全盖住下面的图片。也不能太大,太大了则不能产生重叠效果。

总之就是要即要产生重叠效果,又不能完全盖住。

this.attachMovie(\var pic_mc = eval(\pic_mc._x = 150 +random(200); pic_mc._y = 100 + random(200);

现在图片已加载到舞台上了,并产生了不完全重叠效果。接下来就是实现点击图片让该图片移到最上层,所以用到图片MC的onRelease事件,以第一张图片为例:

pic1_mc.onRelease = function(){

在这个事件执行中首先确定最上面的图片的深度值。上面介绍了getNextHighestDepth()返回的是最大的深度值加1,那么最大的深度值自然就是getNextHighestDepth()减1了。

var zddepth = _root.getNextHighestDepth()-1;

有了最大的深度值后,就可以确定最上面的图片是哪张了: var zd_mc:MovieClip = _root.getInstanceAtDepth(zddepth);

最后将这张图片与最大深度那张图片交换深度,那这张图片深度值就最大了,当然也就在最上面了:

this.swapDepths(zd_mc);

第一张图片的点击动作代码就完成了。下面写第二张图片的代码,因为每张图片点击事件中的代码是完全一样的,所以复制第一张图片的代码,粘帖到第一张图片代码的下面,将第一句pic1_mc.onRelease = function(){中的pic1改为pic2,就行了。

以后的以此类推,直到完成所有的图片的点击代码。

第五节 拖动与碰撞检测

AS的一个重要优势就是可以实现交互动画,一些特效不用AS也是可以做出来的,但交互的动画不用AS则是无法实现的。拖动MC则是交互动画的一个例子。

startDrag() 函数或 MovieClip.startDrag() 方法: 使用startDrag()可以实现拖动效果。格式:

MC.startDrag(一个布尔值,左边,上边,右边,下边);

这个方法中的所有参数都是可选的,即可要可不要。下面介绍一下这些参数:

一个布尔值:true或false。当设定为true时鼠标位置将锁定在要拖动的MC的注册点上。想一想我们要自定义鼠标指针,这个参数是不是很有用呢?

后面的4个边,确定了MC可以被拖动的范围。想一想我们要做一个控制滑条这几个参数是不是很有用呢?

下面练习一下: 自定义鼠标指针:

新建一个MC,画一个或找一个你喜欢的鼠标图形,图形应该有一个较尖的部位作为针尖吧?将这个针尖与窗口中的十字对齐。回到主场景,将这个MC拖到舞台上,打开属性面板,实例名称为:mouse_mc;打开帧动作面板输入: Mouse.hide(); mouse_mc.startDrag(true); 测试影片,你会发现你的鼠标已经变成你喜欢的图形了。 代码中第一句将系统鼠标隐藏起来,第二句使你的图形可以拖动了,并且鼠标指针被定位在针尖处。使用自定义鼠标要注意的是,你不能再拖动第二个MC,因为一次只能拖动一个MC,当你拖动第二个MC时,你的鼠标图形将不会再被拖动了。

stopDrag()方法:

上面介绍了开始拖动MC的方法,开始拖动总得有停止拖的时候啊,这个方法就是停止拖动。我们回想一下拖动一个MC的过程,一般来说,都是点下鼠标左键不放,就可以拖动了,放开鼠标后就停止拖动,是这样的吧?所以一般将startDrag()放到MC的onPress事件(点下鼠标时)中,而将 stopDrag()放到onRelease事件(放开鼠标时)中。

滑动控制条:

有时我们会用到滑动控制条,比如控制音量大小,播放进度等。那么滑块就需要用到拖动的方法。

用矩形工具画一个细长的矩形,笔触填充公随你喜欢,要不要都行,至少要一个吧?将它转换为MC,双击它进入编辑状态,打开对齐面板选择相对于舞台,左对齐,回到主场景,打开属性面板,实例名称为blt_mc。然后再画一个很短的矩形,做滑块,也转换为MC,也同细长的矩形一样的做法,只是居中对齐,最后的实例名为hk_mc。

blt_mc移到你想它所处的位置,将hk_mc移到blt_mc上。 在帧动作面板中输入: l = blt_mc._x; r = l+blt_mc._width; h = blt_mc._y; hk_mc.onPress = function(){ this.startDrag(\} hk_mc.onRelease = function(){ stopDrag(); num = (hk_mc._x-blt_mc._x)/blt_mc._width; } 测试影片,拖动滑块会发现滑块只能在进度条的范围内拖动了。这是因为我们对startDrag()由于方法运用了4个参数:l,r,h.它们分别是进度条的左右边的x位置及y轴的位置。滑块的移动范围被限定在这个范围内。

从上面的代码中可以看出,当鼠标放开时会产生一个num变量,这个变量是用滑块的x坐标减去进度条的x坐标除以进度条的长度,这样就可以得到一个0~1的数字。有了这个数字,我们就可以用于任何需要用数字控制的对象了。

_droptarget 属性:

可能会有这种情况,我们拖动一个对象,想知道它是否被拖到了另一个对象之上,比如我们拖动苹果到盘子中,我们可能想知道苹果是否被拖到了盘子之上,如果是苹果则定位到盘子上,如果不是苹果就掉到深渊中。MC的_droptarget 属性将返回被自已重叠在下面的MC的名称。比如将苹果拖到盘子上时,苹果将盘子压在下面,苹果的_droptarget 属性将返回盘子的名称。但它返回的名称是带反斜杠的格式的,因此需要用eval()将其转换为标准格式,如:eval(苹果. _droptarget)这一句结果是:盘子。

做个练习熟悉一下: 在舞台上画两个园,不同的颜色,均转换为MC,实例名称分别为:mc1_mc,mc2_mc.右击mc1_mc>排列>移至顶层;打开动作面板,输入:

mcx = mc1_mc._x; mcy = mc1_mc._y; mc1_mc.onPress = function(){ this.startDrag(true); } mc1_mc.onRelease = function(){ stopDrag(); if(eval(mc1_mc._droptarget)==mc2_mc){ this._x = mc2_mc._x; this._y = mc2_mc._y; } else { this._x = mcx; this._y = mcy; } } 测试影片,在mc1_mc上点击时可以拖动,将它拖到mc2_mc上放开鼠标,则与mc2_mc重叠,如果不在mc2_mc上放开鼠标,则回到原位。

这种检查一个MC是否被拖到另一个MC之上还有另一种方法,那就是碰撞检测。

hitTest()方法:

该方法将检测MC是否与某点或与另一MC发生相交(碰撞)。如果发生相交则返回true,否则返回false.

用法:1.与某点相交: MC.hitTest(x,y,true或false);

这将检测MC是否与括号中的x,y所确定的点(x,y)相交。后面的布尔值如果为ture,那么将检测MC的实际图形范围,如果为false则检测MC的外框是否与(x,y)相交。

2.MC与MC相交:MC.hitTest(另一MC).

把上面的的练习改为下面的代码,可得到相同的结果: mcx = mc1_mc._x; mcy = mc1_mc._y; mc1_mc.onPress = function(){ this.startDrag(true); } mc1_mc.onRelease = function(){ stopDrag(); if(this.hitTest(mc2_mc)){ this._x = mc2_mc._x; this._y = mc2_mc._y; } else { this._x = mcx; this._y = mcy; } }

第6节 使用遮罩

遮罩是flash动画制作常使用的一种技术。它可形面一个空洞使被遮盖的对象能透过空洞成形为可见。在flash舞台上常使用遮罩层来实现这个技术。在AS中则常采用MC来实现遮罩。将遮罩对象和被遮罩对象均制作成MC,然后使用setMask()方法即可实现遮罩效果。

setMask()方法:

MC的setMask()方法,可使一个MC成为自已的遮罩。 MC.setMask(另一个MC);

练习:在舞台上画一个矩形,将其转换为MC,实例名称为:jx_mc. 再画一个小一点的园,将其转换为MC,实例名为yun_mc; 将园放到矩形上,打开动作面板,输入: jx_mc.setMask(yun_mc);

yun_mc.onPress=function(){ this.startDrag(true); }

yun_mc.onRelease=function(){ stopDrag(); }

测试影片,园已成了矩形的遮罩。 遮罩设备字体文本: 经常有人问,为什么我做的文本被罩后,点播放有遮罩效果,测试影片时,就什么都没有了呢?以前我们都教别人的做法是,将文本打散,因为文本打散后就是图象了,就可以有遮罩效果了。这样做是比较简单一些,但有个问题,打散后的文字有可能笔画会粘连在一起不好看。我们还是想为什么文本就不能被遮罩呢?这是因为你使用了设备字体。在flash中设备字体不能用遮罩层来遮罩,只能用MC来遮罩,也就是说只能用上面的方法实现。

练习:新建一MC,用文本工具输入一句话(使用设备字体)。回到主场景,将文本MC拖到舞台上。实例名称为:wb_mc.在文本的左边画一个无笔触,任一填充的矩形,高同文本,宽10象素

左右。转换为MC,实例名称为:zz_mc.双击它,进入编辑状态,在第40帧插入关键帧,用变形工具将它拖成与文本一样长,遮住文本,创建补间动画。回到主场景,新建一层,打开动用面板,输入:

wb_mc.setMask(zz_mc);

测试影片,我们要要的遮罩效果出现了。 关于 Alpha 通道遮罩:

我们常常看到一种效果,有人把它叫模糊遮罩,有人把它叫羽化遮罩。一眼看上去,聪明如我的家伙们就知道这是一种遮罩效果。这无非就是遮罩层透明度降低一些,或使用模糊滤镜。于是信心满满地就开始做了,结果是可想而知的,失败!

Flash把这种遮罩叫做Alpha 通道遮罩,使用这种遮罩可以设置遮罩元件的透明度,也可以使用滤镜效果。但使用这种遮罩必须注意两点:1. Alpha 通道遮罩:不支持遮罩层的遮罩方式,只能使用MC来遮罩。2.遮罩MC和被遮罩MC都必须使用“运行时位图缓存”。

下面我们来做个练习,进一步掌握本节所介绍的内容。

1. 新建一flash文档,导入一张背景图片和一张观音图片。

2. 先制作元件,新建一MC,取名为观音,将观音图片拖入,调整大小,居中对齐。 3. 新建一MC,取名为遮罩观音,将观音元件拖入居中对齐,打开属性面板,实例名称为:img_mc,在“使用运行时缓存”前打钩。在200帧插入帧,上锁。新插入一图层画一个无笔触任一填充色的椭园,如下图:

将这个椭园转换为MC,实例名称为:zz_mc, 在“使用运行时缓存”前打钩。打开滤镜面板,为zz_mc添模糊滤镜,值为100.在第30 帧插入关键帧,回到第一帧,将椭园缩小到2像素,建立补间动画。在第90帧插入关键帧,在第120帧插入关键帧,将椭园缩小到2像素。在第200帧插入帧。上锁。新建一图层,取名为action,打开帧动作面板,输入:

img_mc.setMask(zz_mc);

4. 新建一MC,取名为“文本”,用文本工具输入,如下图的文字,使用设备字体。

Flash ActionScript2.0教程

getInstanceAtDepth()方法:这个方法将返回某个特定深度值上的MC实例。比如要确定当前最大深度值的MC,可以用如下代码:varzddepth=this.getNextHighestDepth()-1;//获得当前最大的深度值varmy_mc:MovieClip=this.getInstanceAtDepth(zddepth);getDept
推荐度:
点击下载文档文档为doc格式
62uuu423a46cyp27mpdk
领取福利

微信扫码领取福利

微信扫码分享