⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 textureloadqueue.as

📁 著名的flash 3d引擎 away 3d的源代码
💻 AS
字号:
package away3d.loaders.utils{	import flash.events.Event;	import flash.events.EventDispatcher;	import flash.events.HTTPStatusEvent;	import flash.events.IOErrorEvent;	import flash.events.ProgressEvent;	import flash.events.SecurityErrorEvent;	import flash.net.URLRequest;				[Event(name="complete", type="flash.events.Event")]	[Event(name="httpStatus", type="flash.events.HTTPStatusEvent")]	[Event(name="ioError", type="flash.events.IOErrorEvent")]	[Event(name="progress", type="flash.events.ProgressEvent")]	[Event(name="securityError", type="flash.events.SecurityErrorEvent")]		/**	 * Creates a queue of textures that load sequentially	 */		public class TextureLoadQueue extends EventDispatcher	{		private var _queue:Array;		private var _currentItemIndex:int;				private function redispatchEvent(e:Event):void		{			dispatchEvent(e);		}				private function onItemComplete(e:Event):void		{			cleanUpOldItem(currentLoader);			_currentItemIndex++;			loadNext();		}				private function loadNext():void		{			if(_currentItemIndex >= numItems){				dispatchEvent(new Event(Event.COMPLETE));			}else{				var evt:ProgressEvent = new ProgressEvent(ProgressEvent.PROGRESS);				evt.bytesTotal = 100;				evt.bytesLoaded = percentLoaded;				dispatchEvent(evt);				if(currentLoader.contentLoaderInfo.bytesLoaded > 0 && currentLoader.contentLoaderInfo.bytesLoaded == currentLoader.contentLoaderInfo.bytesTotal){									}else{									// make it lowest priority so we handle it after the loader handles the event itself. That means that when we					// re-dispatch the event, the loaders have already processed their data and are ready for use					currentLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onItemComplete, false, int.MIN_VALUE, true);										currentLoader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, redispatchEvent, false, 0, true);					currentLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, redispatchEvent, false, 0, true);					currentLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, redispatchEvent, false, 0, true);					currentLoader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, redispatchEvent, false, 0, true);					currentLoader.load(currentURLRequest);				}			}		}				private function calcProgress():Number		{			var baseAmount:Number = currentItemIndex / numItems;			var currentItemFactor:Number = calcCurrentLoaderAmountLoaded() / numItems;			return baseAmount = currentItemFactor;		}				private function calcCurrentLoaderAmountLoaded():Number		{			if(currentLoader.contentLoaderInfo.bytesLoaded > 0){				return currentLoader.contentLoaderInfo.bytesLoaded / currentLoader.contentLoaderInfo.bytesTotal;			}else{				return 0;			}		}				private function cleanUpOldItem(item:TextureLoader):void		{			currentLoader.removeEventListener(Event.COMPLETE, onItemComplete, false);			currentLoader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, redispatchEvent, false);			currentLoader.removeEventListener(IOErrorEvent.IO_ERROR, redispatchEvent, false);			currentLoader.removeEventListener(ProgressEvent.PROGRESS, redispatchEvent, false);			currentLoader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, redispatchEvent, false);			}				/**		 * Returns the number of items whating in the queue to be loaded.		 */		public function get numItems():int		{			return _queue.length;		}		/**		 * Returns the index of the current texture baing loaded		 */		public function get currentItemIndex():int		{			return _currentItemIndex;		}				/**		 * Returns an array of loader objects containing the loaded images		 */		public function get images():Array		{			var items:Array = [];			for each (var item:LoaderAndRequest in _queue)			{				items.push(item.loader);			}			return items;		}				/**		 * Returns the loader object for the current texture being loaded		 */		public function get currentLoader():TextureLoader		{			return (_queue[currentItemIndex] as LoaderAndRequest).loader;		}				/**		 * Returns the url request object for the current texture being loaded		 */		public function get currentURLRequest():URLRequest		{			return (_queue[currentItemIndex] as LoaderAndRequest).request;		}						/**		 * Returns the overall progress of the loader queue.		 * Progress of 0 means that nothing has loaded. Progress of 1 means that all the items are fully loaded		 */		public function get progress():Number		{			return calcProgress();		}				/**		 * Returns the overall progress of the loader queue as a percentage.		 */		public function get percentLoaded():Number		{			return progress * 100;		}				/**		 * Creates a new <code>TextureLoadQueue</code> object.		 */		public function TextureLoadQueue()		{			_queue = new Array();					}				/**		 * Adds a new loader and request object to the load queue.		 * 		 * @param	loader		The laoder object to add to the queue.		 * @param	request		The url request object to add tp the queue.		 */		public function addItem(loader:TextureLoader, request:URLRequest):void		{			//check to stop duplicated loading			for each (var _item:LoaderAndRequest in _queue) {				if (_item.request.url == request.url)					return;			}			_queue.push(new LoaderAndRequest(loader, request));		}				/**		 * Starts the load queue loading.		 */		public function start():void		{			_currentItemIndex = 0;			loadNext();		}	}}import flash.net.URLRequest;import away3d.loaders.utils.TextureLoader;class LoaderAndRequest {		public var loader:TextureLoader;	public var request:URLRequest;		public function LoaderAndRequest(loader:TextureLoader, request:URLRequest)	{		this.loader = loader;		this.request = request;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -