loadMovie问题全解

2008-04-02 11:01:41来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  使用loadMovie能够动态的载入外部文档,从而减少主文档的体积,有利于网上下载,连同对各项子文档的修改,更换。假如没有做过FLASH网页,能够看看这个FLASH网页的基本组成情况,见图2-2-1

  

  只需要把图中的主文档和子文档用比如ftp工具传到自己的空间上,就能够轻松的实现只下载主文档,假如需要浏览的子文档就能够单独下载,能够想想,假如您的整个FLASH网页不分主次,全部统一个FLASH,做成了几M甚至10多M,那么有谁愿意等着看您的网页呢?除非您自己。

  于是使用loadMovie就显得很重要了。现在就让我们从基础开头,然后去分析使用loadMovie所涉及到的具体问题吧。使用loadMovie有两种基本的方法:(一)将外部swf文档载入到某一层上。(二)将外部swf文档载入到时间轴的某个影片剪辑中。对这两种方法的使用,用图表示更加直观些。见图2-2-2

  

  第二种方法又能够这样写:_root.mc.loadMovie(“a1.swf”);假如a1的后缀名为 jpg那么载入的是外部图片。载入图片和载入swf文档的道理是相同的,就不赘述。说到这里还比较空洞,做一个实例来看看。

  一、新建一个文档夹,任意取一个名字 比如:mywangye

  二、做一个Flash发布成swf文档并且取名字为a1,保存在mywangye这个目录中,这个a1就是我们要载入的子文档。

  三、然后做主文档,由于我们是做最简单的,所以什么也不画,就在这个主文档的第一桢,写 loadMovie(“a1.swf”,1) 同样将这个文档保存在mywangye目录中,取个名字叫index

  四、测试效果,源文档见本文后的打包中的01文档夹

  然后用上面图中的第2种语法,继续做一个,注意了,第二种方法需要在舞台上放一个mc并且取一个实例名,或创建一个空的MC。做了上面的小实验后,我们能够总结些什么结论呢?假如仅仅是得到能够加载外部文档这么一条结论的话,那么就太肤浅了。能够让我们想到:被加入进来的外部文档的坐标问题;长宽问题;外部文档比较大,造成的加载延时问题;如何访问被加载进来的swf的问题;不要加载了,卸载问题…..这些问题我们假如不研究下,真正在做网页的时候,会碰到很多麻烦的。

  由上面的最简单的加载我们能够得到这样的结论:(1)假如采用加载到层上的,加载进来后默认注册点是舞台的左上角;假如采用加载到mc里面的,那么默认注册点是MC的注册点。假如MC的注册点是左上角,那么被加载进来的SWF文档就和MC的左上角对准;假如MC的注册点是中央,那么加载进来的SWF就把左上角和MC的中央对齐。(2)被加载进来的MC保留原来的长宽比例。

  问题一:如何控制被加载进来的SWF文档的坐标和长宽比例大小?

  控制被加载进来的SWF文档控制其长宽要采用onEnterFrame,比如:

  on (press) {

  loadMovie("a2.swf", "_root.mymc");

  onEnterFrame = function () {

  _root.mymc._x = 0;

  _root.mymc._y = 0;

  _root.mymc._width = 330;

  _root.mymc._height = 240;

  };

  }

  为什么用 onEnterFrame呢?因为被加载进来的的过程中,有点延时,假如没有onEnterFrame语句,那么语句读取一次就不读取了,然而读取了这一次之后,还没有加载进来,所以就会导致坐标大小配置无效。同样,假如加载到层上,也是这样的。

  on (press) {

  loadMovie("a1.swf", 1);

  onEnterFrame = function () {

  _level1._x = 17;

  _level1._y = 30;

  _level1._width = 330;

  _level1._height = 240;

  };

  }

  请注意这两种方法,第一种,把外部的a2加载到mymc中,加在进来后,a2就自动的替换了mymc,我们直接配置mymc的属性就配置了被加载进来的swf的属性。第二种方法,_level是对于加载到时间轴上的电影的引用,加载到第2层就是_level2;加载到第3层就是_level3。

  问题之二:如何实现点击按钮加载一个外部SWF文档,并且要显示加载的下载进度呢?

  有两个方法来实现这个效果,其一:把加载londing写在主文档中,其二,被加载的子SWF文档有自己的londing。现在分别给予说明。

  其一:在主文档中写londing

  外部子swf文档名为a1,主文档中有一个动态文本框名为loadText,一个按钮名为bbt,现在把loadMovie和londing写在桢上。

  _root.bbt.onPress = function() {

  _root.createEmptyMovieClip("mc", 10);

  mc.loadMovie("a1.swf");

  mc._visible = false;

  _root.bbt.onEnterFrame = function() {

  var l = mc.getBytesLoaded();

  var t = mc.getBytesTotal();

  var getPercent = l/t;

  loadText = Math.round(getPercent*100) "%";

  if (l>0 && l>=t) {

  mc._visible = true;

  delete this.onEnterFrame;

  }

  mc._x = 10;

  mc._y = 10;

  mc._width =440;

  mc._height = 320;

  };

  };

  其二:子文档中有自己的londing

  这个写法和前面说的londing相同,只是注意一个问题就是注意路径的问题,比如这样写:

  第一祯

  loaded = getBytesLoaded();

  total = getBytesTotal();

  lts = Math.round((loaded/total)*100);

  wenben = lts "%";

  第二祯

  if (lts == 100) {

  gotoAndStop(3);

  } else {

  gotoAndPlay(1);

  }

  和前面的londing中介绍的比较,看出不同之处没有呢?仅仅是去掉了_root因为被加载后,外部SWF文档就相当于主文档中的一个MC 有了_root 就是指向主文档的_root 了,当然会显示错误。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 用MovieClipLoader连续加载外部图片并进行控制

下一篇: 给Flash课件加把“锁”