まだ、publicなプロパティがあって、完成とはいえない。
loaderのcontent(DisplayObject)を自分にaddChildする。
Actionscript:
- /*-------------------------
- 外部画像を読み込み、
- 格納したSpriteを返す
- setting
- autoLoad:Boolean
- autoAttach:Boolean
- ----------------------------*/
- package info.sunagimo.loader{
- import flash.display.*;
- import flash.net.URLRequest;
- import flash.net.URLLoader;
- import flash.events.*;
- public class ImageLoader extends Sprite {
- private var _url:String;
- private var _autoLoad:Boolean = true;
- private var _autoAttach:Boolean = true;
- private var _smoothing:Boolean = true;
- private var _urlLoader:URLLoader;
- private var _info:LoaderInfo;//bytesLoaded / bytesTotal
- private var _content:DisplayObject;
- public var loader:Loader = new Loader();
- public var myURLLoader:URLLoader;
- public static const LOAD_COMPLETE:String="load complete";
- public static const PROGRESS:String="progress";
- /*---------------------------------------------------------------------------------
- ■読み込み進行具合の検知
- ---------------------------------------------------------------------------------*/
- public function ImageLoader(u:String,args:Object=null) {
- _url=u;
- for(var value:String in args) {
- if(this["_"+value]!=undefined){
- this["_"+value] = args[value];
- }else{
- trace(this+" function:ImageLoader args:"+value+" is undefined");
- }
- }
- if(_autoLoad){
- load();
- }
- }
- /*---------------------------------------------------------------------------------
- ■読み込み開始
- ---------------------------------------------------------------------------------*/
- public function load():Loader{
- _info = loader.contentLoaderInfo;
- _info.addEventListener(Event.COMPLETE,_onLoaded);
- _info.addEventListener(ProgressEvent.PROGRESS,_onProgress);
- var urlReq:URLRequest = new URLRequest(_url);
- _urlLoader = new URLLoader(urlReq);
- loader.load(urlReq);
- return loader;
- }
- /*---------------------------------------------------------------------------------
- ■イベント
- ---------------------------------------------------------------------------------*/
- private function _onLoaded(event:Event):void {
- _info.removeEventListener(Event.COMPLETE,_onLoaded);
- _info.removeEventListener(ProgressEvent.PROGRESS,_onProgress);
- _content = loader.content;
- if(_smoothing){
- var bmp:Bitmap = Bitmap(_content);
- bmp.smoothing = true;
- }
- if(_autoAttach){
- addChild(_content);
- }
- dispatchEvent(new Event(ImageLoader.LOAD_COMPLETE));
- }
- /*---------------------------------------------------------------------------------
- ■読み込み進行具合の検知
- ---------------------------------------------------------------------------------*/
- private function _onProgress(e:Event):void{
- dispatchEvent(new Event(ImageLoader.LOAD_COMPLETE));
- }
- public function getProgress(type:String=""):Number{
- var ret:Number;
- ret = Math.floor(_info.bytesLoaded/_info.bytesTotal);
- if(type=="%"){
- ret*=100;
- }
- return ret;
- }
- /*---------------------------------------------------------------------------------
- SETTER GETTER
- ---------------------------------------------------------------------------------*/
- public function get info():LoaderInfo{
- return _info;
- }
- public function get content():DisplayObject{
- if(_content == null){
- trace(this+"ERROR:get content() content is undefined");
- return null;
- }else{
- return _content;
- }
- }
- }
- }
使い方
Actionscript:
- package {
- import flash.display.*;
- import flash.events.*;
- import info.sunagimo.loader.*;
- [SWF(backgroundColor="0x330000")]
- public class Test2 extends Sprite{
- private var lo:ImageLoader;
- public function Test2(){
- lo = new ImageLoader("mac_wp01.jpg");//引数に画像のURLをいれる
- //addChild(lo); //ここでaddChildしても読み込みが完了したら自動で表示
- lo.addEventListener(ImageLoader.LOAD_COMPLETE,_onLoaded);
- }
- private function _onLoaded(e:Event):void{
- addChild(lo);
- }
- }
- }