关于AS3中预载问题的解决方案

电介质 发布于 2009年03月01日 星期天 1:14 下午 2 条评论 »

最近在做的一个Flash web交互应用中,所有的交互操作都是由代码控制,元件都是动态的从库中加载到场景中实现的,整个flash场景只有一帧,所有代码都在外部.as文件中,时间轴上无一句代码,虽然最后生成的文件不是很大,但swf预载还是需要实现的,查看了网上关于AS3应用开发中的预载实现,发现大多都不是很完美,有些需要在时间轴的第一帧上加入预载代码,有些用flash隐藏的功能,动态的在第一帧加入代码,而库元件的问题,有些是把在第一帧导入去掉,而在第二帧中隐藏加入所有用到的库元件在场景中…

经过分析和测试,找到一种比较完美的解决方案:

1、将场景分成两帧

2、在发布设置里的flash的脚本设置中,设置类导出在第2帧

3、在文档类的构造函数中写预载代码,类似下例:

this.stop ();//在第一帧停止

loaderInfo.addEventListener (ProgressEvent.PROGRESS, loadProgress);

loaderInfo.addEventListener (Event.COMPLETE, loadComplete);

function loadProgress (event:ProgressEvent):void{

    var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;

    trace("载入"+ percentLoaded*100 + "%");//可以显示载入进度操作

}

function loadComplete (event:Event):void{

    loaderInfo.removeEventListener (ProgressEvent.PROGRESS,loadComplete);
         gotoAndStop (2);//载入完成跳到第二帧停止
         init ();//进行初始化

}

这样时间轴上不用写任何代码,包括stop()等,所有代码都在外部as文件中,而且由于库元件都在第2帧导入,所以第一帧很小。

注意事项:因为库元件都在第2帧导入,而文档类在第一帧就开始构造了,所以在预加载完成前,不要实例化库中的类,如 new 库元件类(),否则不能正确建立类实例;但可以声明库元件的类变量。

带预载入代码的完整的文档类文件结构如下:

package {

     public class 类名 extends MovieClip{

            类属性变量声明;//注意不要在这里实例化库中的类,但可以声明库类型的变量

            public function 类名(){

                stop();

                预载处理代码;

                预载完成后可以进行库类的实例化操作,或调用应用的初始化方法;

            }

            其他方法定义;

     }

}


此文 关于AS3中预载问题的解决方案 首发在:魔力谷-flash风 作者:电介质

版权所有,欢迎转载,转载请注明作者和出处!

文章分类: AS3, flash

Trackback地址: http://flash.moligu.com/82/trackback

对《关于AS3中预载问题的解决方案》有 2 条评论

  1. miffy ,

    我用你这样的方法加了..
    但如果想加入法Loading的特效呢?例如加入预载条.下载的百分比等.
    不知道要怎么加入!
    还有2、在发布设置里的flash的脚本设置中,设置类导出在第2帧,这个能详细说明了吗?

  2. 电介质 ,

    文中的function loadProgress 这个函数就是处理loading的,你可以在这里显示预载条.下载的百分比等.

    类导出在第2帧,这个就是在flash CS里面选择 “文件/发布设置/”里面的“flash”标签里有个“脚本”选项后面的“设置”按钮点开就是

发表评论