Flash/Flex学习笔记(16):如何做自定义Loading加载其它swf
01 const FILE_PATH:String="main.swf";
02 const CLASS_NAME:String="MainSwf";
03
04 var loader:Loader;
05 var request:URLRequest;
06
07 loader = new Loader();
08 request=new URLRequest(FILE_PATH);
09 loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
10 loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
11 loader.load(request);
12
13 function onComplete(e:Event):void {
14 var domain:ApplicationDomain=e.target.applicationDomain as ApplicationDomain;
15 var swfClass:Class=domain.getDefinition(CLASS_NAME) as Class;
16 var swfInstance:Sprite = (new swfClass()) as Sprite;
17 swfInstance.x=0;
18 swfInstance.y=0;
19
20 //卸掉舞台上现有的东西
21 var _childCount = numChildren;
22 for (var i:int=_childCount-1; i>=0; i--) {
23 this.removeChildAt(i);
24 }
25
26 //加载刚下载的动画
27 this.addChild(swfInstance);
28 }
29
30 function onProgress(e:ProgressEvent) {
31 //trace(e);
32 label1.text = "正在加载," + e.bytesLoaded + " / " + e.bytesTotal + ", " + (Math.round( (100 * e.bytesLoaded / e.bytesTotal) / 0.01) * 0.01) + " %";
33 }
34
35 stop();
解释:as3中每个fla都可以对应一个.as文件,用于实现代码界面分离,上面代码中的CLASS_NAME即为.as文件中定义的类名 
注意:如果在Main.fla中用到了系统组件(比如TileList之类),最好在Loading.fla中也拖一个出来到舞台上,然后删除,否则在loading中加载main的实例时,会出一些莫名其妙的问题!
浙公网安备 33010602011771号