ActionScript 3.0 学习(十四) 从加载的.swf文件中读取flash库中的as链接的类

        /**  直接将flash库中的元件放到.swf中加载,会使.swf文件的体积变大。一般对于项目中用的较多的加载,
*   比如对所有角色的运动动画的加载,可以将动作位图放在falsh库中,并做好as链接,然后生成.swf文件。
*   此时, 即可从加载的.swf文件中读取flash库中的as链接的类 ,并实例化出对象,加载到舞台上。具体代码如下(本代码段中还包含Vector的排序用法):

* */

package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
	import flash.utils.Endian;


	public class ParseSwfLibraryUtil
	{
		public static var LOAD_COMPLETE:String = "load_complete";
		
		public static var _asLinkNameArr:Vector. = new Vector.;
		
		public static var bitmapArray:Vector. = new Vector.;
		
		private static var _dispatcher:EventDispatcher = new EventDispatcher();
		
		public function ParseSwfLibraryUtil()
		{
		}
		
		public static function parseSwf(swfName:String):void
		{
			var swfLoader:Loader = new Loader();
			var url:URLRequest = new URLRequest(swfName);
			
			swfLoader.load(url);
			swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
		}
		
		public static function onLoadComplete(event:Event):void
		{
			(event.target as LoaderInfo).removeEventListener(Event.COMPLETE, onLoadComplete);
			
			var bytes:ByteArray = LoaderInfo(event.target).bytes;
			
			bytes.endian=Endian.LITTLE_ENDIAN;
			
			bytes.position=Math.ceil(((bytes[8]>>>3)*4+5)/8)+12;
			
			while(bytes.bytesAvailable > 2){
				
				var head:int=bytes.readUnsignedShort();
				
				var size:int=head&63;
				
				if (size==63)size=bytes.readInt();
				
				if (head>>6!=76)bytes.position+=size;
					
				else {
					
					head=bytes.readShort();
					
					for(var i:int=0;i y)
			{
				return 1;
			}
			else
			{
				return 0;
			}
		}
	}
}


你可能感兴趣的:(ActionScript,3.0)