关于AS3中预载问题的解决方案
最近在做的一个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();
预载处理代码;
预载完成后可以进行库类的实例化操作,或调用应用的初始化方法;
}
其他方法定义;
}
}

我用你这样的方法加了..
但如果想加入法Loading的特效呢?例如加入预载条.下载的百分比等.
不知道要怎么加入!
还有2、在发布设置里的flash的脚本设置中,设置类导出在第2帧,这个能详细说明了吗?
文中的function loadProgress 这个函数就是处理loading的,你可以在这里显示预载条.下载的百分比等.
类导出在第2帧,这个就是在flash CS里面选择 “文件/发布设置/”里面的“flash”标签里有个“脚本”选项后面的“设置”按钮点开就是