最近鼓捣除了一个加载器。可以分布式地加载文本文件以及SWF文件。本人将它写成了一个Flex库。本着共同进步的目的,我将其分享出来。


测试结果 :


控制台:


测试资源:

关于 Flash(SWF)美术资源的介绍:

关于测试的核心代码 :

package{importcom.DispalyLoader;importcom.LoaderManager;importcom.ResLibrary;importcom.TextObjectLoader;importflash.display.MovieClip;importflash.display.Sprite;importflash.events.ProgressEvent;importflash.system.ApplicationDomain;importflash.system.LoaderContext;publicclassMyTestextendsSprite{[SWF(frameRate='30',width='1280',height='720',backgroundColor='0x001119',pageTitle="TEST")]publicfunctionMyTest(){var$urlHttp:String=stage.loaderInfo.url;var$index:int=$urlHttp.indexOf("MyTest");varhttp:String=$urlHttp.substring(0,$urlHttp.indexOf("MyTest"));trace(http);var$loader:LoaderManager=newLoaderManager(true,true);var$txtRes:TextObjectLoader=newTextObjectLoader(this.textCallback,http+"config.xml");var$txtLanRes:TextObjectLoader=newTextObjectLoader(this.textCallback,"../asset/xml/lan.xml");var$display:DispalyLoader=newDispalyLoader(this.displayCallBack,"../asset/swf/Test.swf",ApplicationDomain.currentDomain);var$display1:DispalyLoader=newDispalyLoader(this.displayCallBack,"../asset/swf/Others.swf",ApplicationDomain.currentDomain);$loader.append($txtRes);$loader.append($txtLanRes);$loader.append($display);$loader.append($display1);$loader.startLoader();}privatefunctiontextCallback($type:String,$data:Object,$extends:Object=null):void{switch($type){case"COMPLETE":trace("http:"+$data+"数据:"+$extendsasString);break;case"PROGRESS":var$progress:ProgressEvent=$dataasProgressEvent;trace("加载进度:"+($progress.bytesLoaded/$progress.bytesTotal));break;}}privatefunctiondisplayCallBack($type:String,$data:Object,$extends:Object=null):void{switch($type){case"LOADED":ResLibrary.instance.addSwf($dataasString,($extendsasLoaderContext).applicationDomain);//测试var$swfArr:Array=($dataasString).split("/",($dataasString).length);var$mc:MovieClip=null;switch($swfArr[$swfArr.length-1]){case"Test.swf":$mc=ResLibrary.instance.getMovieClip("MCC");break;case"Others.swf":$mc=ResLibrary.instance.getMovieClip("MCQ");break;}stage.addChild($mc);break;case"LOADED_ERROR":break;case"PROGRESS":break;}}}}

##############################################################################

补充 : 加载外部p_w_picpath

packagecom{importflash.display.Bitmap;importflash.display.Loader;importflash.events.Event;importflash.events.HTTPStatusEvent;importflash.events.IOErrorEvent;importflash.events.ProgressEvent;importflash.events.SecurityErrorEvent;importflash.system.ApplicationDomain;importflash.utils.ByteArray;importiface.IResLoader;/***图片加载器*@authorKayer*/publicfinalclassImagePathLoaderimplementsIResLoader{privatevar_simLoader:SimpleStreamLoader;privatevar_loader:Loader;privatevar_doMain:ApplicationDomain;privatevar_url:String;privatevar_callBack:Function;privatevar_nextCallBack:Function;/***@param$callBack:回调函数*@param$url:img资源位置*/publicfunctionImagePathLoader($callBack:Function,$url:String){this._callBack=$callBack;this._url=$url;this._loader=newLoader();this.eventListener(true);}privatefunctioneventListener($isAdd:Boolean):void{if($isAdd){this._loader.contentLoaderInfo.addEventListener(Event.COMPLETE,this.onEventReading);this._loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,this.onEventReading);}else{this._loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,this.onEventReading);this._loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,this.onEventReading);}}publicfunctionstartLoad($simLoader:SimpleStreamLoader):void{this._simLoader=$simLoader;if(!this._simLoader.isLoading){this._simLoader.load(this.simpleStreamLoaderCallBack,this._url);}}privatefunctiononEventReading($e:Event):void{switch($e.type){caseEvent.COMPLETE:this._callBack("LOADED",this._url,this._loader.contentasBitmap);//返回图片if(this._nextCallBack!=null)this._nextCallBack();break;caseIOErrorEvent.IO_ERROR:this._callBack("LOADED_ERROR",$e,null);break;}}privatefunctionsimpleStreamLoaderCallBack($type:String,$data:*,$extend:Object=null):void{switch($type){case"LOADERROR":var$arr:Array=$dataasArray;trace("加载错误:url->["+this._url+"]=是否有资源正在加载:"+$arr[0]+",当前加载的url:"+$arr[1]);break;case"OPEN":trace("开始加载url:"+this._url);break;case"COMPLETE":var$bytes:ByteArray=$extendasByteArray;this._loader.loadBytes($bytes,null);break;case"HTTP_STATUS":var$httpStatusEvent:HTTPStatusEvent=$dataasHTTPStatusEvent;trace("url:"+this._url+",HttpStatu:"+$httpStatusEvent.status);break;case"SECURITY_ERROR":var$securityErrorEvent:SecurityErrorEvent=$dataasSecurityErrorEvent;trace("url:"+this._url+","+$securityErrorEvent.text);break;case"IO_ERROR":var$IOErrorEvent:IOErrorEvent=$dataasIOErrorEvent;trace("url:"+this._url+","+$IOErrorEvent.text);break;case"PROGRESS":var$progressEvent:ProgressEvent=$dataasProgressEvent;this._callBack("PROGRESS",$progressEvent,null);break;}}publicfunctiongetisLoading():Boolean{returnthis._simLoader.isLoading;}publicfunctionmanagerLoadingNext($callBack:Function):void{this._nextCallBack=$callBack;}/**销毁*/publicfunctiondespose():void{this._loader.unloadAndStop();this.eventListener(false);this._loader=null;if(this._nextCallBack!=null)this._nextCallBack=null;}}}

测试:

package{importcom.DispalyLoader;importcom.ImagePathLoader;importcom.LoaderManager;importcom.ResLibrary;importcom.TextObjectLoader;importflash.display.Bitmap;importflash.display.MovieClip;importflash.display.Sprite;importflash.events.MouseEvent;importflash.events.ProgressEvent;importflash.system.ApplicationDomain;importflash.system.LoaderContext;publicclassMyTestextendsSprite{[SWF(frameRate='30',width='1280',height='720',backgroundColor='0x001119',pageTitle="TEST")]publicfunctionMyTest(){var$urlHttp:String=stage.loaderInfo.url;var$index:int=$urlHttp.indexOf("MyTest");varhttp:String=$urlHttp.substring(0,$urlHttp.indexOf("MyTest"));trace(http);var$loader:LoaderManager=newLoaderManager(true,true);var$txtRes:TextObjectLoader=newTextObjectLoader(this.textCallback,http+"config.xml");var$txtLanRes:TextObjectLoader=newTextObjectLoader(this.textCallback,"../asset/xml/lan.xml");var$display:DispalyLoader=newDispalyLoader(this.displayCallBack,"../asset/swf/Test.swf",ApplicationDomain.currentDomain);var$display1:DispalyLoader=newDispalyLoader(this.displayCallBack,"../asset/swf/Others.swf",ApplicationDomain.currentDomain);var$display2:DispalyLoader=newDispalyLoader(this.displayCallBack,"../asset/swf/Click.swf",ApplicationDomain.currentDomain);var$img:ImagePathLoader=newImagePathLoader(this.imgCallBack,"../asset/img/t.jpg");$loader.append($txtRes);$loader.append($txtLanRes);$loader.append($display);$loader.append($display1);$loader.append($display2);$loader.append($img);$loader.startLoader();}privatefunctiontextCallback($type:String,$data:Object,$extends:Object=null):void{switch($type){case"COMPLETE":trace("http:"+$data+"数据:"+$extendsasString);break;case"PROGRESS":var$progress:ProgressEvent=$dataasProgressEvent;trace("加载进度:"+($progress.bytesLoaded/$progress.bytesTotal));break;}}privatefunctiondisplayCallBack($type:String,$data:Object,$extends:Object=null):void{switch($type){case"LOADED":ResLibrary.instance.addSwf($dataasString,($extendsasLoaderContext).applicationDomain);//测试var$swfArr:Array=($dataasString).split("/",($dataasString).length);var$mc:MovieClip=null;switch($swfArr[$swfArr.length-1]){case"Test.swf":$mc=ResLibrary.instance.getMovieClip("MCC");var$t:Bitmap=ResLibrary.instance.getBitMapOnSwf("res.img");$t.x=350;stage.addChild($t);break;case"Others.swf":$mc=ResLibrary.instance.getMovieClip("MCQ");break;case"Click.swf":var$a:MovieClip=ResLibrary.instance.getMovieClip("A");$a.x=(stage.width-$a.width)>>1;$a.y=(stage.height-$a.height)>>1;stage.addChild($a);var$b:MovieClip=ResLibrary.instance.getMovieClip("B");$b.x=($a.width-$b.width)>>1;$b.y=($a.height-$b.height)>>1;$a.addChild($b);var$c:MovieClip=ResLibrary.instance.getMovieClip("C");$c.x=($b.width-$c.width)>>1;$c.y=($b.height-$c.height)>>1;$b.addChild($c);$a.addEventListener(MouseEvent.CLICK,this.ClcikHandler,false,0,false);break;}if($mc!=null)stage.addChild($mc);break;case"LOADED_ERROR":break;case"PROGRESS":break;}}privatefunctionimgCallBack($type:String,$data:Object,$img:Bitmap=null):void{switch($type){case"LOADED":varbitm:Bitmap=$img;stage.addChild(bitm);break;case"LOADED_ERROR":break;case"PROGRESS":break;}}privatefunctionClcikHandler(event:MouseEvent):void{trace(event.target,event.currentTarget);}}}

注意 :ImagePathLoader的回调函数


附件:http://down.51cto.com/data/2368026