loadMovie应用举例 多画面与画中画实现

悲酥清风 Flash1 3,499,494阅读模式

加载外部文件命令loadMovie()可以在播放 SWF 文件的同时,将外部的 SWF 文件或 JPEG 文件加载到 Flash Player 中,使您可以同时显示几个 SWF 文件,或者在几个SWF 文件之间切换。
loadMovie应用举例 多画面与画中画实现源文件下载

本节知识要点

1、loadMovie("url",target [, method])

"url" :要加载的 SWF 文件或 JPEG 文件的绝对路径或相对路径。

使用相对路径一般应将播放的.swf文件与要加载的.swf文件放在同一文件夹中。绝对 路径必须有详细的路径地址。

target:目标影片剪辑(mc元件)的名称和路径。目标影片剪辑将替换为加载的 SWF 文件或图像。

method 可选参数,一般可以不选。

如果 SWF 文件加载到目标影片剪辑,则可使用该影片剪辑的目标路径来定位加载的 SWF 文件。加载到目标的 SWF 文件或图像会继承目标影片剪辑的位置、旋转和缩放属性。加载的图像或 SWF 文件的左上角与目标影片剪辑的注册点对齐

2、MovieClip._lockroot

因为用loadMovie()加载的外部文件是加载到一个mc元件上,所以,外部文件中指向场景(_root)的路径此时应该是指向这个mc元件而不是主文件的场景。使用MovieClip._lockroot可以使加载的文件中的_root仍然是指向原来文件的场景.

3、my_mc.getNextHighestDepth()

返回一个整数,即影片剪辑的下一个可用的深度值

4、switch

创建动作脚本语句的分支结构。像 if 动作一样,switch 动作测试一个条件,并在条件返回 true 值时执行语句。

5、case

用法:case expression:statements

定义用于 switch 动作的条件。如果 case 关键字后的 expression 参数在使用全等 (===) 的情况下等于 switch 动作的 expression 参数,则执行 statements 参数中的语句。

6、 _global 对象

创建全局变量、对象或类。

例题---仿电视的多画面画中画效果

请看效果:

制作思路:只要在同一场景中使用多个mc,使它们同时载入外部.swf文件或者jpg,那么就可以实现多画面效果。但是,在多画面与画中画的状态下,因为各mc载入外部.swf文件时有一个时间差,所以各画面仿电视的同步播放比较困难。这需要被调入的外部.swf文件和主场景文件的配合。

我们打开外部文件“111.fla”文件,AS脚本为:

1、在帧上的脚本

第 1 帧:

  1. gotoAndPlay(x);//这个x是主场景中设置的全局变量;

最后1帧:

  1. x=1//设置本地变量x

打开主文件6.8.fla,在这个源文件上的脚本如下:

第 1 帧 :

  1. stop();
  2.   swf1 = "111.swf";//设置变量swf1来表示外部.swf文件 
  3.   loadMovie(swf1, e); //在目标元件e上调入swf1 
  4.   e._x = 125//设置目标元件e的坐标(即调入swf1的坐标) 
  5.   e._y = 50;

第 2 帧 :

  1. clip = [a, b, c, d]; //设置数组对象,数组元素为4个目标mc 
  2.   lp = ["http://files.jb51.net/UploadFile/2003-10/200310149471524589.swf""http://files.jb51.net/UploadFile/2004-4/200441713272664530.swf""http://files.jb51.net/UploadFile/2004-3/2004371753525251.swf""http://files.jb51.net/UploadFile/2003-11/200311201054795610.swf""http://files.jb51.net/UploadFile/2003-11/2003112817413249950.swf","http://cn.flasher123.com/flasher123/mmz/dsxl.swf""http://files.jb51.net/UploadFile/2003-10/200310170464214894.swf"];
  3.        //设置数组对象,数组元素为网上.swf 
  4.    _global.x = _root.e._currentframe;
  5.      //把目标mc播放的当前帧(即调入外部文件的当前帧)用全局变量x表示; 
  6.      //下面脚本中使调入外部文件的从全局变量x帧开始播放; 
  7.    m = getNextHighestDepth();//取得下一个可用的mc的深度; 
  8.    a.swapDepths(m);     //设置mc元件a的深度为下一个可用的mc的深度; 
  9.    loadMovie(swf1, a);    //在目标元件a上调入swf1 
  10.    a._x = 125;        //设置目标元件a的坐标(即调入swf1的坐标) 
  11.    a._y = 50;
  12.    a._xscale = 50;     //设置目标元件a的放大系数(即调入swf1的放大系数) 
  13.    a._yscale = 50;
  14.    j = k=0;        //设置变量初值

第 3 帧:

  1. _global.x=_root.e._currentframe;//与第2帧上的脚本类同 
  2.   m=getNextHighestDepth()
  3.   b.swapDepths(m)
  4.   loadMovie(swf1, b);
  5.   b._x = 125;
  6.   b._y = 250;
  7.   b._xscale = 50;
  8.   b._yscale = 50;

第 4 帧:

  1. _global.x=_root.e._currentframe;//与第2帧上的脚本类同 
  2.   m=getNextHighestDepth()
  3.   c.swapDepths(m)
  4.   loadMovie(swf1,c);
  5.   c._x = 400;
  6.   c._y = 250;
  7.   c._xscale = 50;
  8.   c._yscale = 50;

第 5 帧:

  1. _global.x = _root.e._currentframe;//与第2帧上的脚本类同 
  2.   m = getNextHighestDepth();
  3.   d.swapDepths(m);
  4.   loadMovie(swf1, d);
  5.   d._x = 400;
  6.   d._y = 50;
  7.   d._xscale = 50;
  8.   d._yscale = 50;
  9.   unloadMovie(e); //删除最开始调入的swf

第 6 帧:

  1. e._lockroot = true; //使被选中的元件在调入的外部文件的_root指向本身的主时间轴 
  2.   loadMovie(lp[k], e); //配合按扭中的mc的变化;

2、在按扭上的脚本:

在“多屏幕”按扭上的脚本:

  1. on (release) {
  2.   nextFrame();
  3.  }

在“单屏”按扭上的脚本:

  1. on (release) {
  2.    for (i=0; i<4; i++) {
  3.    unloadMovie(clip[i]);  //删去元件a,b,c,d上加载的外部swf文件; 
  4.    clip[i].swapDepths(-i-1);//降低a,b,c,d的深度,使元件e加载的swf能显示出来; 
  5.    clip[i]._alpha = 100;  //元件a,b,c,d的透明度有可能降低,这里把恢复它们的透明度 
  6.    }
  7.   nextFrame();//到下一帧停下 
  8.  }

在“屏幕选择”按扭上的脚本:

  1. on (press) {
  2.   txt = ""//设置文本txt为空 
  3.   switch (j=j+1) {//创建switch 动作脚本语句的分支结构 
  4.   case 1 : //如果j==1,就执行 
  5.    a._alpha = 40//元件a是透明度为40 
  6.    break//跳出switch循环体。以下类同 
  7.    case 2 :
  8.    a._alpha = 100;
  9.    b._alpha = 40;
  10.    break;
  11.   case 3 :
  12.    b._alpha = 100;
  13.    c._alpha = 40;
  14.    break;
  15.   case 4 :
  16.    c._alpha = 100;
  17.    d._alpha = 40;
  18.    break;
  19.   case 5 :
  20.    d._alpha = 100;
  21.    j = 0;
  22.    break;
  23.   }
  24.  }

在“更换节目”按扭上的脚本:

  1. on (release) {
  2.    if (j == 0) {
  3.      txt = "请先选择屏幕";
  4.    } else {          //当j不等于0时,执行下列命令: 
  5.    clip[j-1]._alpha = 100;  //恢复被选中的元件的透明度 
  6.    clip[j-1]._lockroot = true;//使被选中的元件在调入的外部文件的_root指向本身的主时间轴 
  7.    loadMovie(lp[k], clip[j-1]);//在clip[j-1]元件中调入数组lp中第k个元数表示的网址 
  8.    k++;
  9.   if (k == lp.length) {//数组lp中元素个数 
  10.   k = 0;
  11.   }
  12.  }
  13. }

在第 6 帧上 “多屏”按扭上的脚本:

  1. on (release) {
  2.   gotoAndStop(1);
  3.  }

在第 6 帧上“更换节目”按扭上的脚本:

  1. on (release) {
  2.   k++;
  3.   if (k == 7) {    //数组lp中有7个元素 
  4.    k = 0;
  5.   }
  6.   e._lockroot = true;
  7.   loadMovie(lp[k], e);//在e元件中调入数组lp中第k个元数表示的网址 
  8. }

作业:

把2至4帧的脚本用自定义函数简化;把在“屏幕选择”按扭上的脚本用函数或者数组变量简化。

悲酥清风
  • 本文由 发表于 2015年4月18日 01:05:28
评论  1  访客  0  引用  1

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定