修改LoaderMax加载图片的demo

http://bbs.9ria.com/thread-62618-1-1.html
package
{
	import com.greensock.events.*;
	import com.greensock.loading.*;
	import com.greensock.loading.display.*;
	import com.greensock.plugins.*;
	
	import fl.controls.Button;
	
	import flash.display.*;
	import flash.events.*;
	/**
	 * 系统. 
	 * @author 0924wyr
	 */	
	[SWF(height = '500',width = '550')]
	public class os extends Sprite
	{
		/** @private */
		private var _xmlLoader:XMLLoader;
		
		/** @private */
		private var _imagesLoader:LoaderMax;
		
		/** @private */
		private var _items:Vector.<LoaderMaxDemoItem> = new Vector.<LoaderMaxDemoItem>;
		
		/** @private */
		private var names:Array = ['load','pause','resume','unload'];
		/** 构造函数 */
		public function os()
		{
			// 一定要记得激活!!!
			LoaderMax.activate([ImageLoader]);
			TweenPlugin.activate([ColorTransformPlugin]);
			// 此插件用于增加tweenmax.to中的vars,colorTransform:{...},整个swf只需要声明一次即可
			// 例如 TweenMax.to(mc,1,{colorTransform:{tint:0xff0000,tintAmout:0.5}});
			// TweenMax.to(mc,1,{colorTransform:{brightness:0.5}}); // 这有变暗的效果,范围0 - 2, 全黑到全白
			
			// 用..表示上一级目录
			
			// LoaderMax vars参数
			// 1. name:此参数用于指定该loader的实例名称,可以被用于LoaderMax.getLoader(name) or Loader.getContent(name),
			//          或者任何时候被追踪到应该是唯一的,如果不指定将默认指定一个比如 loader21
			// 2.maxConnections 指定同时加载的数量,默认是2
			// 3.skipFailed 默认是true,true表示将跳过失败的加载,如果为false,遇到失败时这个加载将停止,同时加载的状态变为 LoaderStatus.FAILED
			// 4.autoLoad 设置自动加载,不用手动load(). 无论何时再添加加载项目到max中,都将自行加载
			// 5.loaders 需要放入加载队列的数组,XMLLoader、SWFLoader等对象
			// 6.autoDispose 当complete的时候,将自动移除其他的监听事件
			// 7.还有 onOpen(开始加载),onProgress(加载中),onComplete(完成加载),onError(失败)等事件
			
			//swfloader有x,y,width,height,scaleMode,hAligh,container,等等。参看官方api吧
			_xmlLoader = new XMLLoader('../asset/source.xml',{name:"sites",onComplete:onComplete,onError:onError});
//			_xmlLoader.load();
			
			initBtns();
			// =======================
			// swfloader test
			// 指定container将立即被add到container中,不用手动执行addChild()
			var swfLoader:SWFLoader = new SWFLoader('../asset/button.swf',{onComplete:swfComplete,container:this});// url: "http://www.greensock.com/_img/loadermax/sites.xml"
			swfLoader.load();
			
		}
		
		/** @private for test */
		private function swfComplete(e:LoaderEvent):void
		{
			var sp1:DisplayObject = e.target.content; // sp1.numChildren = 0
			var sp2:DisplayObject = e.target.rawContent; // sp2.numChildren = 0
//			addChild(sp1); // sp1 is ContentDisplay
//			addChild(sp2); // sp2 is MovieClip
			// 即content只表示了加载内容的容器,一个ContentDisplay对象,整个负责显示而已
			// rawContent 表示加载的只是内容,MovieClip或者bitmap等,这样你可以访问swf中的属性或者方法
			// 获取swf中的动态文本框内容:trace(sp2.tf.text); // 输出 i am a button.
			// 读取sp1.tf会出错,因为不存在。
			// 所以只显示的话,一半用content即可。还有一点就是在开始加载loader.load()时就可以用content注册鼠标事件等
			//或者addChild到舞台
			// XMLLoader只有content对象(XML),没有rawContent
		}
		
		/** @private */
		private function initBtns():void
		{
			// 获取自带组件按钮的方法:新建fla,元件库中拖入一个按钮组件,然后发布设置勾选swc,再添加到lib即可。
			for(var i:int = 0,len:int = names.length;i < len;++i)
			{
				var btn:Button = new Button;
				btn.label = names[i];
				btn.name = names[i];
				addChild(btn);
				btn.x = 25 + i * (btn.width + 10);
				btn.y = stage.stageHeight - btn.height - 10;
				btn.addEventListener(MouseEvent.CLICK, handlerBtn, false, 0, true);
			}
		}
		
		/** @private */
		private function onComplete(e:LoaderEvent):void
		{
			var sites:XMLList = (_xmlLoader.content as XML).site;
			// LoaderCore.content :不同的Loader有不同的对象
			// XMLLoader.content : XML
			// SWFLoader,ImageLoader,VideoLoader: ContentDisplay(a sprite)
			// MP3Loader: Sound
			// LoaderMax:an array of sub loader's content
			//-----------------------------
			// ImageLoader,SWFLoader还有分content和rawContent,
			var sub:XML;
			var display:DisplayObject;
			var item:LoaderMaxDemoItem;
			for each(sub in sites)
			{
				// 通过 名字 获取已经加载好的图片,唯一instance name 用于此处
				display = LoaderMax.getContent(sub.@name + "Thumb");
				if(display)
				{
					item = new LoaderMaxDemoItem(sub.@name,display);
					item.addEventListener(Event.CHANGE,updatePriorities);
					_items.push(item);
				}
			}
			
			for(var i:int = 0,len:int = _items.length;i < len; ++i)
			{
				item = _items[i];
				this.addChild(item);
				item.x = i % 5 * item.width + 25;
				item.y = int(i / 5) * item.height + 54;
			}
			
			// name 用于getLoader,此loaderMax已有loaders等数据,从xml中直接获取
			_imagesLoader = LoaderMax.getLoader('imagesLoader') as LoaderMax;
			updatePriorities();
		}
		
		/** @private */
		private function handlerBtn(e:MouseEvent):void
		{
			switch (e.target.name)
			{
				case names[0] :
					_imagesLoader.maxConnections = 2;
					_imagesLoader.load(false); // 参数 flushContent 如果为true,会重新再开始加载
					return;
				case names[1] :
					_imagesLoader.pause(); // 暂停
					return;
				case names[2] :
					_imagesLoader.resume(); // 不暂停,直接重新加载
					return;
				case names[3] :
					_imagesLoader.unload(); // 移除所有已经加载的,并设置bytesLoaded = 0
					return;
				default :
					throw new Error('unknown btn');
			}
		}
			
		/** @private */
		private function updatePriorities(e:Event = null):void
		{
			for(var i:int = 0,len:int = _items.length;i < len;++i)
			{
				_items[i].priorityLabel = _imagesLoader.getChildIndex(_items[i].imageLoader) + 1; // 获取加载的次序,初始是0
			}
		}
		
		/** @private */
		private function onError(e:LoaderEvent):void
		{
			throw new Error(e.type);
			var box:Sprite;
		}
	}
}



package
{
	import com.greensock.TweenMax;
	import com.greensock.events.LoaderEvent;
	import com.greensock.loading.*;

	import flash.display.*;
	import flash.events.*;
	import flash.filters.GlowFilter;
	import flash.text.*;

	/**
	 * 子项.
	 * @author 0924wyr
	 */
	public class LoaderMaxDemoItem extends Sprite
	{
		/** @private **/		
		private var _thumbnail:DisplayObject;
		/** 图片加载 **/
		public var imageLoader:ImageLoader;
		/** @private **/	
		private var _priorityLabel:int;
		/** @private **/	
		private var _priorityTF:TextField;
		/** @private **/	
		private var _progressTF:TextField;
		/** @private **/	
		private var _progressBar:Shape;
		/**
		 * 构造函数.
		 * 
		 * @param name 实例名称.
		 * @param ins 显示对象.
		 */
		public function LoaderMaxDemoItem(name:String,ins:DisplayObject)
		{
			this.name = name;
			_thumbnail = ins;
			this.addChild(this._thumbnail);
			
			// 应用brightness
			TweenMax.to(this,0,{colorTransform:{brightness:0.5}});

			initProgressTF();

			_priorityTF = createText("left",3,2,65,4);

			initProgressBar();

			initImageLoader();

			addMouseListener();
		}
		
		/** @private **/	
		private function initProgressTF():void
		{
			_progressTF = createText("right",68,this.height - 16,32,2);
			_progressTF.text = "0%";
		}
		
		/** @private **/	
		private function initProgressBar():void
		{
			_progressBar = new Shape;
			_progressBar.graphics.beginFill(9561600,1);
			_progressBar.graphics.drawRect(0,0,100,6);
			_progressBar.graphics.endFill();
			addChild(_progressBar);
			_progressBar.y = this._thumbnail.height;
			_progressBar.scaleX = 0;
		}
		
		/** @private **/	
		private function initImageLoader():void
		{
			// getLoader by name,then addEventListener
			this.imageLoader = LoaderMax.getLoader(this.name + "Image") as ImageLoader;
			// bytesLoaded发生改变
			this.imageLoader.addEventListener(LoaderEvent.PROGRESS,handlerLoader,false,0,true);
			// 开始加载 OPEN
			this.imageLoader.addEventListener(LoaderEvent.OPEN,handlerLoader,false,0,true);
		}
		
		/** @private **/	
		private function addMouseListener():void
		{
			this.addEventListener(MouseEvent.ROLL_OVER,handleMouseEvent,false,0,true);
			this.addEventListener(MouseEvent.ROLL_OUT,handleMouseEvent,false,0,true);
			this.addEventListener(MouseEvent.CLICK,handleMouseEvent,false,0,true);
		}
		
		/** @private **/	
		private function createText(tfAlign:String,tfX:Number,tfY:Number,tfWidth:Number,blureXY:int):TextField
		{
			var tf:TextField = new TextField();
			tf.textColor = 16777215;
			tf.defaultTextFormat = new TextFormat("Arial",11,16777215,null,null,null,null,null,tfAlign);
			tf.x = tfX;
			tf.y = tfY;
			tf.width = tfWidth;
			tf.height = 16;
			tf.selectable = false;
			tf.filters = [new GlowFilter(0,1,blureXY,blureXY,2,2)];
			this.addChild(tf);
			return tf;
		}
		
		/** @private **/	
		private function handlerLoader(e:LoaderEvent):void
		{
			switch(e.type)
			{
				case LoaderEvent.PROGRESS:
					// e.target.progress or e.target.bytesLoaded 0 ~ 1
					_progressTF.text = int(e.target.progress * 100) + "%";
					_progressBar.scaleX = e.target.progress;
					if(this.imageLoader.status != LoaderStatus.LOADING)
					{
						TweenMax.to(this,0.5,{colorTransform:{brightness:0.5}});
					}// end if
					break;
				case LoaderEvent.OPEN:
					TweenMax.to(this,0.2,{colorTransform:{brightness:1}});
					break;
			}
		}
		
		/** @private **/	
		private function handleMouseEvent(e:MouseEvent):void
		{
			switch(e.type)
			{
				case MouseEvent.CLICK:
					this.imageLoader.prioritize();
					dispatchEvent(new Event(Event.CHANGE));
					return;
				case MouseEvent.ROLL_OUT:
					if(this.imageLoader.status == LoaderStatus.READY)
					{
						TweenMax.to(this,0.5,{colorTransform:{brightness:0.5}});
					}// end if
					return;
				case MouseEvent.ROLL_OVER:
					TweenMax.to(this,0.2,{colorTransform:{brightness:1}});
					return;
			}
		}
		/** 优先级标签. **/
		public function get priorityLabel():int
		{
			return _priorityLabel;
		}
		public function set priorityLabel(value:int):void
		{
			_priorityLabel = value;
			_priorityTF.text = value.toString();
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值