FileLoader(multi0.2)
fileLoader2
クラス化してみた。うむむloadの処理は難しいなー
今後の課題
・複数ドメイン上のcrossdomain.xml対応
・gif,png,txt,swf,flvなどにも対応。
・bitmap,bitmapdataで戻せるように(最適な色深度対応)。
・エラーにちゃんと対応できるように。
/**
* Copyright umhr ( http://wonderfl.net/user/umhr )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/wONe
*/
/*
fileLoader2
クラス化してみた。うむむloadの処理は難しいなー
今後の課題
・複数ドメイン上のcrossdomain.xml対応
・gif,png,txt,swf,flvなどにも対応。
・bitmap,bitmapdataで戻せるように(最適な色深度対応)。
・エラーにちゃんと対応できるように。
*/
package {
import flash.display.Sprite;
public class fileLoader2 extends Sprite{
private var loadFiles_array:Array;
private var data_xml:XML;
private var MultiLoader:MultiLoaderClass = new MultiLoaderClass("http://mztm.heteml.jp/crossdomain.xml");
public function fileLoader2(){
loadFiles_array = MultiLoader.setLoad(["http://mztm.heteml.jp/umhr/3d/arss/data.xml"],onXMLComp);
}
private function onXMLComp():void{
var jpg_array:Array = new Array();
data_xml = XML(loadFiles_array[0].data);
var _length:int = data_xml.items.item.length();
for (var i:int = 0; i < _length; i++) {
if(data_xml.items.item[i].jpg != ""){
var _array:Array = String(data_xml.items.item[i].jpg).split('/');
var jpg_url:String = "http://mztm.heteml.jp/umhr/3d/arss/revolution/"+_array.pop();
jpg_url = jpg_url.replace(/%/g,'');
jpg_array.push(jpg_url);
//jpg_array.push(data_xml.items.item[i].jpg);
}
}
loadFiles_array = new Array();
loadFiles_array = MultiLoader.setLoad(jpg_array,onImgComp);
}
private function onImgComp():void{
var _length:int = loadFiles_array.length;
for (var i:int = 0; i < _length; i++) {
loadFiles_array[i].x = (i%12)*(150*0.26);
loadFiles_array[i].y = int(i/12)*(150*0.26);
loadFiles_array[i].scaleX = loadFiles_array[i].scaleY = 0.26;
addChild(loadFiles_array[i]);
}
}
}
}
class MultiLoaderClass{
import flash.system.Security;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.display.Loader;
//import flash.display.LoaderInfo;
private var onComplete:Function = function():void{};
private var loadNum:int;
private var loadCompNum:int;
public function MultiLoaderClass(_str:String = null){
if(_str != null){
Security.loadPolicyFile(_str);
}
}
public function setLoad(__item_array:Array,_onComp:Function = null):Array{
loadCompNum = loadNum = 0;
onComplete = _onComp;
var _array:Array = new Array();
var _length:int = __item_array.length;
for (var i:int = 0; i < _length; i++) {
if(__item_array[i] == null){continue};
var _extension:String = __item_array[i].substr(-4,4).toLowerCase();//拡張子を取り出す。
if(_extension == ".xml"){
loadNum ++;
_array[i] = fnURLLoader(__item_array[i]);
}else if(_extension == ".jpg"){
loadNum ++;
_array[i] = fnLoader(__item_array[i]);
}else{
//_array[i] = null;
}
}
return _array;
}
private function fnURLLoader(__url:String):URLLoader{
var _loader : URLLoader = new URLLoader();
_loader.load(new URLRequest(__url));
_loader.addEventListener (Event.COMPLETE,completeHandler);
_loader.addEventListener (IOErrorEvent.IO_ERROR, ioErrorHandler);
return _loader;
}
private function fnLoader(__url:String):Loader{
var _loader:Loader = new Loader();
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
_loader.load(new URLRequest(__url));
//_loader.name = __url;
return _loader;
}
private function completeHandler(event:Event = null):void {
loadCompNum ++;
if(loadCompNum == loadNum){
onComplete();
}
//var loaderInfo:LoaderInfo=event.currentTarget as LoaderInfo;
//var loader:Loader=loaderInfo.loader;
//addChild(loader);
}
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),"*****");
completeHandler();
}
}