zoukankan      html  css  js  c++  java
  • flash actionscript MovieClip(电影剪辑)控制

    Flash可以做出千变万化,多姿多彩的动画效果,其中很大一部分都是由控制电影剪辑(MC)的属性来达到的。在Flash MX 2004的【动作】面板中,属性被放在各个相应的类中,不像以前的版本,把各个类的属性统一地放在一起。如果在编程时需要使用MC的属性,你可以在【动作】面板的【内置类】|【影片】|【MovieClip】类别里找到。

    1.MC属性控制
    (1)MC属性简介

    在Flash MX 2004中,MC的属性有30余种,我们在这里介绍部分常用的,最具代表性的属性。

    _alpha:电影剪辑实例的透明度。有效值为 0(完全透明)到100(完全不透明)。默认值为100。你可以通过对MC的_alpha属性在0到100之间变化的控制,制作出或明或暗或模糊的效果来。

    _rotation:电影剪辑的旋转角度(以度为单位)。从0到180的值表示顺时针旋转,从0到-180的值表示逆时针旋转。不属于上述范围的值将与360相加或相减以得到该范围内的值。例如:语句my_mc._rotation=450与my_mc._rotation=90相同。

    _visible:确定电景剪辑的可见性,当MC的_visible的值是True(或者为1)时,MC为可见;当MC的_visible的值是false(或者为0)时,MC为不可见。

    _height:影片剪辑的高度(以像素为单位)。

    _width:影片剪辑的宽度(以像素为单位)。

    _xscale:影片剪辑的水平缩放比例。

    _yscale:影片剪辑的垂直缩放比例。

    当_xscale和_yscale的值在0~100之间时,是缩小影片剪辑为原影片剪辑的百分数;当_xscale和_yscale的值大于100时,是放大原影片剪辑;当_xscale或_yscale为负时,水平或垂直翻转原影片剪辑并进行缩放。

    不要把影片剪辑的高度与垂直缩放比例混淆,也不要把影片剪辑的宽度与水平缩放比例混为一谈,例如:

    MC._width=50//表示把MC的宽设置为50像素;

    MC._xscale=50//表示把MC的水平宽度设置为原来水平宽度的50%。

    _x:影片剪辑的x坐标(整数)。

    _y:电景剪辑的y坐标(整数)。

    注意:如果影片剪辑在主时间轴中,则其坐标系统将舞台的左上角作为 (0, 0),向右和向下逐渐增加。如果影片剪辑在其它影片剪辑的时间轴中,则以其中心位置为(0,0),向右和向下为正,并逐渐增加。向左和向上为负,并逐渐减小。

    (2)getProperty()和setProperty()命令

    在前面我们介绍了部分常用的MC的属性,那么到底怎么去实现对其属性的控制呢?常用的命令是setProperty()和getProperty(),即设置属性命令和取得属性的命令。在Flash MX 2004中,这两个命令在【动作】面板中【全局函数】|【影片剪辑控制】类别下。

    setProperty()命令用来设置MC的属性,它的一般使用形式为:

    setProperty(目标,属性,值);

    命令中有三个参数:

    目标:就是要控制(设置)属性的MC的实例名,注意包括MC的位置(路径)。

    属性:即要控制的何种属性,例如透明度、可见性、放大比例等。

    值:属性对应的值,包括数值、布尔值等。

    例如:

    setProperty(“_root.mc.mc1”,_visible, false);//表示把影片mc下一个实例名为mc1的影片设置为不可见。

    setProperty("_root.dm",_rotation,30);//表示要使实例名叫dm的影片剪辑转动30度。

    getProperty()命令用来获取MC的属性,它的一般使用形式为:

    getProperty(目标,属性);

    命令中有两个参数:

    目标:被取属性的MC实例的名称;

    属性:要取得的MC的属性。

    例如:

    mx= getProperty(“_root.mc.mc1”,_x);//取得影片mc下一个实例名为mc1的影片的横坐标,并把它交给变量mx;

    setProperty("_root.dm1",_y, getProperty("_root.dm0",_y));//表示设置影片dm1的纵坐标为影片dm0的纵坐标。或者说,取得影片dm0的纵坐标的值,把这个值作为影片dm1的纵坐标的值。这种方法经常用在动态地为影片设置属性。

    (3)使用点语法存取属性值

    除了用setProperty()和getProperty()命令设置和取得MC的属性外,如果你的英语不错,ActionScript运用也比较熟练,那么你也可以用“.”点语法来设置或取得MC的属性,有时候会觉得很方便。点语句的用法的一般形式为:

    影片剪辑名称.属性=属性值。

    影片剪辑名称当然包括它的路径(后面会比较详细地介绍路径的概念)。下面我们以前面的例子来说明。

    setProperty(“_root.mc.mc1”,_visible, false);

    可以写成:

    _root.mc.mc1._visible=false;

    setProperty("_root.dm",_rotation,30);

    可以写成:

    _root.dm._rotation=30;

    mx= getProperty(“_root.mc.mc1”,_x);

    可以写成:

    mx= _root.mc.mc1._x;

    setProperty("_root.dm1",_y, getProperty("_root.dm0",_y));

    可以改写成两句:

    my=_root.dm0._y;

    _root.dm1._y=my;

    是不是有的情况下点语法更精练写呢?

    2.复制电影剪辑命令
    你一定见过Flash动画中倾盆大雨、满天雪花、繁星点点等特效吧!这些特效就是利用duplicateMovieClip()命令的神奇功能来实现的!

    duplicateMovieClip()命令的一般使用形式为:

    duplicateMovieClip(目标,新名称,深度);

    其中有三个参数:

    target(目标):要复制的电影剪辑的名称和路径。

    newname(新名称):是复制后的电影前辑实例名称。

    depth(深度):已经复制电影剪辑的堆叠顺序编号。每个复制的电影剪辑都必须设置唯一的深度,否则后来复制的电影剪辑将替换以前的复制的电影剪辑,新复制的电影剪辑总是在原电影剪辑的上方。

    在使用时,需要注意以下几点:

    u       复制的影片会保持父级影片原来的所有属性,所以,原来的影片是静止的,复制后的影片也静止,并且一个叠放在另一个上,如果你不给它们设置不同坐标,你就只能看到编号最大的复制影片,也就看不出是否复制出的效果了。

    u       原来的影片在做补间运动,那么复制品也要做同样的运动。并且无论播放头在原始影片剪辑(或“父”级)中处于什么位置,复制的影片播放头始终从第一帧开始。所以,复制品和原影片始终有个时间差,因此,即使你不给复制的影片设置坐标,你也可以看到复制品在运动。

    u       复制影片经常要与影片属性控制(特别是_x,_y,_alpha,_rotation,_xscale,_yscale等属性)结合才能更好地发挥复制效果。

    u       复制影片还经常都要和循环语句配合,才能复制多个影片剪辑。

    有时候,你需要删除复制好的影片,那就用removeMovieClip()命令,一般形式为:

    removeMovieClip(影片剪辑实例名);

    这个命令只有一个参数,那就是复制后的影片剪辑实例名称。

    例如:

    for(I=1;I<10;I++){ //变量I从1开始,到9为止,变量每次加1

    duplicateMovieClip(”_root.a”,”a”+I,I);

    }

    上面这段程序代码对一个名字为a的影片剪辑实例进行复制,复制后的实例名称为a1,a2,…a9,深度分别为1,2,…9。

    那么,在删除这些复制的影片剪辑实例时,你可以用下面的循环语句:

    for(I=1;I<10;I++){

    removeMovieClip(”a”+i);

    }

    有关这个复制影片剪辑命令的详细应用请参看本章第四节的前两个实例。

    3.影片剪辑的路径
    在前面,我们不止一次谈到MC的路径,那么什么叫路径,怎么运用路径呢?

    我们知道,在Flash的场景中有个主时间轴,在场景里可以放置多个MC,每个MC又有它自己的时间轴,每个MC又可以有多个子MC……,就像在我们国家(场境)下有很多个省(MC),每个省下又有许多个市(子MC)……。这样,在一个Flash的影片中,就会出现层层叠叠的MC,如果你要对其中一个MC进行操作,你就说出MC的位置,也就是要说明MC的路径。

    路径分绝对路径和相对路径,下面我们还是用一个实际例子来进行说明。

    假设在场境里有两个MC,一个MC的实例名为mx,在mx下有个子MC名为mx1,在mx1的下面还有一个孙MC名为mx2。

    另一个MC的实例名为dm,在dm下有个子MC名为dm1,在dm1下还有个孙MC名为dm2。

    (1)绝对路径

    不论在那个MC中进行操作,都是从主场景时间轴(用_root表示)出发,到MC,再到MC的子级MC,再到MC的孙级MC…,一层一层地往下寻找。例如下面的操作:

    对mx2使用play()的命令操作,应使用以下这样的程序代码:

    _root.mx.mx1.mx2.play();

    对dm1使用play()的命令操作,应使用以下这样的程序代码:

    _root.dm.dm1.play();

    对mx使用play()的命令操作,应使用以下这样的程序代码:

    _root.mx.play();

    (2)相对路径

    在一个MC内的父、子、孙关系中,有时候用相对路径比较简单,但是,用相对路径时,你必须清楚你在哪一级的MC中,你在对哪一级的MC进行操作。我们以上面的mx为例,使用的仍然是play()命令。

    在mx1中,对它本身进行操作的程序代码为:

    this.play();

    对mx进行操作,因为mx是它的上一级(父级),所以程序代码为:

    _parent.play();

    对mx2的操作,因为mx2是它的子级,所以程序代码为:

    this.mx2.play();或者mx2.play();

    如果在mx2中对mx用相对路径操作就比较麻烦了,程序代码为:

    _parent._parent.play(),因为mx是mx2的父级的父级呀。

    如果用相对路径在mx中或者mx内的MC,对另一个dm内的MC进行操作,就十分麻烦了,我们不推荐这种方法。

    从上面的例子中,我们知道,绝对路径比较好理解,并且用绝对路径可以不必考虑你是在哪级的MC中进行操作的。直接从主场景时间轴(_root)出发,一层一层的往下找,如果你对路径的理解不透,建议你就用绝对路径。用相对路径就必须清楚操作命令是在哪一级MC写的,是在对哪一级的MC进行操作,比较熟练后,在一个MC内用相对路径有时候比较简单。

    (3)插入路径

    在对电影剪辑MC进行编程操作时,你还可以使用【插入目标路径】对话框来对MC的路径进行设置。在【动作】面板中,单击【插入目标路径】按钮,如图7-1-3所示,就可以打开【插入目标路径】对话框,如图7-1-4所示。

    如图7-1-4所示是在对MC设置行为时经常会用到的对话框。在其中,你可以看到经过你注册的MC实例,你需要对哪个MC进行设置,你就可以单击这个MC,然后,选择下面的【相关】(相对路径)或者【绝对】(绝对路径)单选按钮,最后单击【确定】,那么这个MC的实例名和路径就会进入你编辑的脚本中了。

    另外,需要说明的是,对数据或者变量的某些操作,也需要路径的相关知识,也可以仿照对MC的操作。不过就不能用【插入目标路径】对话框了。

    例如,前面的两个MC中,我们想把mx1中的一个数据k,在dm1中得到,那么,我们可以在dm1中用绝对路径来设置:

    I=_root.mx.mx1.k;

    4.拖曳影片剪辑命令
    你一定见过,在Flash动画中,你的鼠标突然变成一个美丽的动物图画,或者你可以任意搬动动画中的物体,Flash动画是怎么实现的呢?那就得用上两个成对出现的命令:“startDrag()”拖拽影片和“stopDrag()”停止拖拽影片。

    如果你要做课件,这两个命令可是不能少的了。

    startDrag()命令的一般形式为:

    myMovieClip.startDrag(lock, left, top, right, bottom);

    myMovieClip是要拖动影片的名字,lock表示影片拖动时是否中心锁定在鼠标,值有true或false,true表示锁定,false表示不锁定。

    left,top,right,bottom这四个参数分别设置影片拖动的左,上,右,下的范围,注意是相对于影片剪辑父级坐标的值,这些值指定该影片剪辑被约束的矩形。这些参数是可选的。

    如果是myMovieClip.startDrag(),则是可以在整个屏幕范围内任意拖动。

    stopDrag()命令可以实现停止拖拽影片命令,这个命令没有参数。

    注意:如果你要拖动某一个影片,一般情况下,你应当在这个影片内加一个按扭,再把上面的命令附加在这个按扭上。

    例如:在场景中有一个影片,实例名为mc,坐标为(250,200),你想让它以(250,200)为中心,高为200,宽为300的矩形范围内被拖动,就应当在mc内放一个按扭,然后在按扭上加上下面的程序代码:

    on (press) {

    _root.mc.startDrag(true,100,100,400,300);//这里的坐标是指的场景内的坐标。

    }

    on (release) {

    stopDrag();//停止拖动这个影片。

    }


  • 相关阅读:
    码云非活跃帐号处理规范
    css 利用animation和transform 设置鸭子表
    css 背景图片
    css 利用transform 实现页面居中效果
    css 表格
    利用雪碧图,完成兔子走路过渡/动画效果
    Apache 2.0.50,+php5.1.2+mysql 5.1 安装手记
    PHP企业级应用之WebService篇(转)
    发个C语言连接Postgresql程序(转)
    array 和 xml 相互转换
  • 原文地址:https://www.cnblogs.com/czjone/p/1858503.html
Copyright © 2011-2022 走看看