http://webftp.bbs.hnol.net/dysr/201101/album/albumD_photo_2.swf 新建网页 1




  这个制作,算是老生常谈了,套用,换图片。
  花了两天时间,作了一点小改进。成功。不亦乐乎。
  原作源自国外,AS1.0脚本,6版播放器。在应用上很受局限。比如,不能应用滤镜。若改为AS2.0,高版本播放器,脚本不对,报错多多。彻底改制,实在有点拿不下。于是一直将将就就。
  原作是将图片导入文件内,这样,往往造成文件偏大(假如每张图片100KB,20张,文件就在2MB以上)。曾尝试外链图片,预加载,这样,文件仅100~200KB。
  凡事有利有弊。解决了文件大的问题,又出来了下载显示的问题。因为,在预加载过程中,如果图片未完全加载,进入正常演示时,图片因下载会有延时,影响效果。这样,预加载就未达到目的。若想控制加载过程,观察下载效果,那就只有增加进度显示。在AS2.0版脚本中,此事很好解决。但在AS1.0中,就出了麻烦。按帮助以及网上的资料介绍,用侦听类的方式加载,不能正常工作;用剪辑加载的方式,得不到对象的参数,进度条做不成。反复查帮助、到网上找资料,终无所获。
  好事多磨,几经周折,还是用了个非正规的歪办法,用剪辑加载的方式解决了。
  下面是加载剪辑(yjz)内的脚本。

       *******************************
stop ();
if (k < _root.pic.length) {
   duplicateMovieClip (yjz, "yjz" + k, this.getNextHighestDepth ());
   _root.yujia = "预加载图片: " + (k + 1) + " / " + _root.pic.length + " 张";
   this["yjz" + k].loadMovie (_root.pic[k]);
   this["yjz" + k]._xscale = 50;
   this["yjz" + k]._yscale = 50;
   this.onEnterFrame = function () {
     var aa = this["yjz" + k].getBytesLoaded ();
     var bb = this["yjz" + k].getBytesTotal ();
     if (aa && bb) {
       _root.yjz_tiao.tiao._width = int (aa / bb * 100);
       if (aa >= bb) {
         delete this.onEnterFrame;
         play ();
       }
     }
   }

} else {
  stop ();
  _root.play ();
}
       *******************************

  制作加载,图片是较特殊的对象,因为在加载的最初得不到图片的有关参数,制作进度显示最需要的“已下载Btys”值和“总Btys”值。摸索中,发现此两值在加载过程中并不是一直没有,只是稍迟一点点。于是,增加一个帧触发,监测此两值,当都出现时,即实施进度显示。解决了问题。