/* MultiLoader 0.3 BulkLoaderをお手本に0から書き直し。 主たる目的としてはBulkLoaderで作ったものを wonderflで公開する時に クラス名をMultiLoaderと書き換えるだけで 動くように作る、というもの。 なので、今の所必要最小限。 EventListenerまわりをちゃんと作り直したら、 だいぶ使い勝手がよくなるはず。今後の課題。 */ package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.system.LoaderContext; public class Main extends Sprite { private var multiLoader:MultiLoader; public function Main() { multiLoader = new MultiLoader("main"); multiLoader.add("http://farm3.static.flickr.com/2499/3828917483_8948414d57_o.jpg",{context:new LoaderContext(true)}); multiLoader.add("http://farm3.static.flickr.com/2664/3828917495_8e21ea52c1_o.jpg",{context:new LoaderContext(true)}); multiLoader.add("http://farm4.static.flickr.com/3467/3828917519_d209a026fb_o.jpg",{context:new LoaderContext(true)}); multiLoader.add("http://farm4.static.flickr.com/3542/3829716284_3f77a81e73_o.jpg",{context:new LoaderContext(true)}); multiLoader.add("http://mztm.heteml.jp/umhr/3d/arss/data.xml"); multiLoader.addEventListener(MultiLoader.COMPLETE, onCompleteHandler); multiLoader.start(); } private function onCompleteHandler(event:Event):void{ var n:int = multiLoader.itemsTotal; for (var i:int = 0; i < n; i++) { if(multiLoader.items[i].type == "image"){ var bitmap:Bitmap = multiLoader.getBitmap(multiLoader.items[i].url.url); bitmap.x = (i%2)*220; bitmap.y = Math.floor(i/2)*220; this.addChild(bitmap); }else if(multiLoader.items[i].type == "text"){ trace(multiLoader.getText(multiLoader.items[i].url.url)); } } } } } /* * Fileローダー * */ import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.system.Security; import flash.utils.Dictionary; class MultiLoader{ public static var IMAGE_EXTENSIONS:Array = ["swf", "jpg", "jpeg", "gif", "png"]; public static var TEXT_EXTENSIONS:Array = ["txt", "js", "xml", "php", "asp"]; public static const COMPLETE:String = "complete"; private var _listener:Function = function(event:Event):void{}; private var _loads:Dictionary; private var _loadCount:int; private var _itemsLoaded:int; public var items:Array; public function MultiLoader(name:String){ _loads = new Dictionary(); _itemsLoaded = 0; items = []; } public function add(url:String,props:Object = null):void{ var loadingItem:LoadingItem = new LoadingItem(); loadingItem.url = new URLRequest(url); loadingItem.type = getType(url); if(props){ if(props.context){ loadingItem.context = props.context; } } items.push(loadingItem); } private function getType(url:String):String{ var i:int; var extension:String; var n:int = IMAGE_EXTENSIONS.length; var result:String = ""; for (i = 0; i < n; i++) { extension = IMAGE_EXTENSIONS[i]; if(extension == url.substr(-extension.length).toLowerCase()){ result = "image"; break; } } if(result == ""){ n = TEXT_EXTENSIONS.length; for (i = 0; i < n; i++) { extension = TEXT_EXTENSIONS[i]; if(extension == url.substr(-extension.length).toLowerCase()){ result = "text"; break; } } } return result; } public function start():void{ var n:int = items.length; for (var i:int = 0; i < n; i++) { var type:String = items[i].type; if(type == "image"){ _loads[items[i].url.url] = loadImage(items[i].url,items[i].context); }if(type == "text"){ _loads[items[i].url.url] = loadText(items[i].url); } } } public function addEventListener(type:String,listener:Function):void{ _listener = listener; } public function getBitmap(key:String):Bitmap{ var bitmap:Bitmap = _loads[key].content; return bitmap; } public function getBitmapData(key:String):BitmapData{ var bitmap:Bitmap = getBitmap(key); var bitmapData:BitmapData = new BitmapData(bitmap.width,bitmap.height); bitmapData.draw(bitmap); return bitmapData; } private function loadImage(url:URLRequest,context:LoaderContext = null):Loader { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComp); loader.load(url,context); return loader; } public function getText(key:String):String{ return _loads[key].data; } private function loadText(url:URLRequest):URLLoader{ var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE,onComp); loader.load(url); return loader; } private function onComp(event:Event):void{ _itemsLoaded ++; if(_itemsLoaded == items.length){ _listener(event); } } public function get itemsTotal():int{ return items.length; } public function get itemsLoaded():int{ return _itemsLoaded; } public function get loadedRatio():Number { return _itemsLoaded/items.length; } } class LoadingItem{ public var url:URLRequest; public var type:String; public var status:String; public var context:LoaderContext; public function LoadingItem(){}; } /* class MultiLoaderClass{ private var onComplete:Function = function(arg:Array=null):void{}; //private var onOpen:Function = function():void{}; private var loadNum:int; private var loadCompNum:int; private var error_array:Array = new Array(); private var URLs_array:Array = new Array(); public var _uniqueParam:String = ""; public var isCheckPolicyFile:Boolean; public function set uniqueParam(uStr:String):void { if (uStr) { if (uStr.substr(0,2) == "?=") { _uniqueParam = uStr; }else { _uniqueParam = "?=" + uStr; } }else { _uniqueParam = ""; } } public function get uniqueParam():String { return _uniqueParam; } public function MultiLoaderClass(_str:String = null,uStr:String = null):void{ if(_str){ Security.loadPolicyFile(_str); } uniqueParam = uStr; } public function setLoad(__item_array:Array = null, _onComp:Function = null):Array { //trace(__item_array) loadCompNum = loadNum = 0; if(_onComp != null){ onComplete = _onComp; } if (__item_array.length == 0) { loadNum ++; onComplete([]); } URLs_array = __item_array.concat(); error_array = new Array(); //trace(__item_array.length) //onOpen = _onOpen; var _array:Array = new Array(); var _length:int = __item_array.length; for (var i:int = 0; i < _length; i++) { error_array[i] = false; if (__item_array[i] == null) { continue }; var _extension:String = __item_array[i].substr(-4,4).toLowerCase();//拡張子を取り出す。 if (_extension == ".xml" || _extension == "html") { //trace("**",__item_array[i]); loadNum ++; _array[i] = fnURLLoader(__item_array[i] + uniqueParam); }else if(_extension == ".jpg" || _extension == ".gif" || _extension == ".png" || _extension == ".swf"){ loadNum ++; _array[i] = img(__item_array[i] + uniqueParam); }else if(_extension == ".bin"){ loadNum ++; __item_array[i] = __item_array[i].substr(0, __item_array[i].length - 4); _array[i] = binaryFromURL(__item_array[i] + uniqueParam); }else{ //trace(__item_array[i]) loadNum ++; _array[i] = img(__item_array[i] + uniqueParam); //_array[i] = null; } } return _array; } private function binaryFromURL(__url:String):URLLoader{ var _loader:URLLoader = new URLLoader(); _loader.dataFormat = URLLoaderDataFormat.BINARY; _loader.addEventListener(Event.COMPLETE,completeHandler); _loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _loader.load(new URLRequest(__url)); return _loader; } private function fnURLLoader(__url:String):URLLoader{ var _loader:URLLoader = new URLLoader(); _loader.addEventListener(Event.COMPLETE,completeHandler); _loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); //_loader.addEventListener(Event.OPEN,openHandler); _loader.load(new URLRequest(__url)); //trace(_loader.loaderInfo);//.loaderURL return _loader; } private function img(__url:String):Loader { var _loader:Loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); //_loader.contentLoaderInfo.addEventListener(Event.OPEN,openHandler); _loader.load(new URLRequest(__url),new LoaderContext(isCheckPolicyFile)); //_loader.name = __url; return _loader; } private function completeHandler(event:Event = null):void { loadCompNum ++; if(loadCompNum == loadNum){ onComplete(error_array); } //var loaderInfo:LoaderInfo=event.currentTarget as LoaderInfo; //var loader:Loader=loaderInfo.loader; //addChild(loader); } private function openHandler (event:Event):void { if(Math.random()>0.95){ trace ("読み込みを開始した"); //event.currentTarget.contentLoaderInfo.close(); var str:String = event.currentTarget.toString().substr(8); if(str == "LoaderInfo]"){ //event.currentTarget.contentLoaderInfo.close(); //event.target.contentLoaderInfo.close(); //event.currentTarget.close(); //event.target.close(); }else if(str == "URLLoader]"){ event.currentTarget.close(); completeHandler(); } //completeHandler(); //onOpen(); } } private function ioErrorHandler(event:IOErrorEvent):void { //event.text = "Error #2035: URL が見つかりません。 URL: file:///~~~~~"; //event.text = "Error #2036: 読み込みが未完了です。 URL: http://~~~~~"; //から、URLのみを取り出す。 //trace(String(event.text).substr(String(event.text).indexOf(" URL: ")+6),"*****"); for (var i:int = 0; i < URLs_array.length; i++) { var _str:String = String(event.text).substr(String(event.text).indexOf(" URL: ")+6).substr(-URLs_array[i].length); if(URLs_array[i] == _str){ error_array[i] = true; //trace("これだ",i,_str) } } //URLs_array completeHandler(); } } */ FileLoader(multi0.3)