运行时共享库的作用是在swf中动态加载外部库,使用库中的资源等等,以下是例子:

1. 新建一fla,命名为Lib.fla
2. 在fla中新建一个元件,库面板中右键选择“链接”,类名设置为MyCircle
3. 新建一as文件,命名为MyCircle.as(空类),代码如下

1
2
3
4
5
package{
	import flash.display.*;
	public class MyCircle extends Sprite{
	}
}

4. Lib.fla的文档类处写LibTest,然后新建一LibTest.as,代码如下

1
2
3
4
5
6
7
8
9
package{
	import flash.display.*;
	public class LibTest extends Sprite{
		public var CircleClass:Class = MyCircle;
		public function echo(string:String){
			trace("echo from lib:" + string);
		}
	}
}

5. shift + f12 导出Lib.swf
6. 新建一app.fla,文档类设置为AppTest
7. 新建AppTest.as,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package{
	import flash.display.*;
	import flash.net.*;
	import flash.events.*;
 
	public class AppTest extends Sprite{
		public function AppTest (){
			init();
		}
 
		public function init():void{
			var loader:Loader = new Loader();
			var req:URLRequest = new URLRequest();
			req.url = "Lib.swf";
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
			loader.load(req);
		}
 
		public function completeHandler(event:Event):void{
			var loader:Loader = (event.target as LoaderInfo).loader;
			var lib:LibTest = LibTest(loader.content);
			trace(lib);
			lib.echo("xxx");
			addChild(new lib.CircleClass());
		}
	}
}

8. 导出运行一下,可以看到Lib.swf被加载以后,AppTest调用lib中的MyCircle类新建了一个圆形加载了舞台上。

这种方法可以用来动态加载字体,或其他比较大但不是必须的资源。
注意这种方法和flash 本身所的runtime sharelib应该是不一样的,flash的这个概念是可以将原件按share lib导出,然后再fla中可以导入swf得到swf中的库元件,这个运行时是指flash开发工具的运行时而不是swf的运行时。

下载本文源代码:sharelib