AS3运行时加载外部库,调用swf中的库

来源:互联网 发布:诸城明诚学校网络平台 编辑:程序博客网 时间:2024/05/16 15:59

使用Flash Builder创建ActionScript项目,最苦恼的事情莫过于没有素材了。如果能通过运行时加载的方式提供素材,那么开发起项目来就事半功倍了!下面介绍的,正是这种运行时加载素材的方式。

【例1】
最近在网上看到一篇关于ApplicationDomain类的文章,有兴趣的朋友不防也去看看,
网址:http://eidiot.net/
参考:http://oliwen.blog.163.com/blog/static/38057532200772891112440/

浅显的研究了一下,发现用这个类竟可以调用加载进来的SWF库文件,嘿嘿,以后做大型的网络开发,这个功能可就能派上大用场了.现将代码公视如下:

var loader : Loader = new Loader();
var context : LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain);

context.applicationDomain = ApplicationDomain.currentDomain;
//context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
这是我写在针上做的一个测试,m2为加载进来的SWF,Tm为m2库中的链接类名.
loader.load(new URLRequest("m2.swf"), context);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadcom);
function loadcom(the:Event):void
{
var runtimeClassRef:Class = getClass("Tm");
var greeter:MovieClip = new runtimeClassRef();
addChild(greeter);
greeter.x=100;
greeter.y=200;

function getClass(className:String):Class
{
   return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
}
}


 

【例2】
---------------------LittleSpace 扩展修改------------------------------
SkinOverAllNoCaption.swf 为FLVPlayBack 组件的一个皮肤~
我这里只调用一个舞台上的按钮【"playpause_mc"】,播放暂停按钮,
此按钮的链接名为:fl.video.skin.PlayButtonNormal

舞台第一帧书写 : this.playButtonNormalState = "fl.video.skin.PlayButtonNormal";
Ctrl+Enter发布SkinOverAllNoCaption.swf

然后新建一个fla,在第一帧写入:
var request:URLRequest = new URLRequest("SkinOverAllNoCaption.swf");
var loader:Loader = new Loader();
var skinTemplate;//注意这里不能定义类型,否则出错[访问未定义的属性]
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, loadComplete);
loader.load (request);
function loadComplete (event:Event):void
{
skinTemplate = Sprite(loader.content);
trace (skinTemplate );
addChild (skinTemplate );
trace (skinTemplate.pauseButtonOverState);
trace (skinTemplate.playpause_mc);
//与加载swf交互
skinTemplate.playpause_mc.addEventListener (MouseEvent.CLICK,clickHandler);
}
function clickHandler (e)
{
//获得加载的swf中的库的定义
var runtimeClassRef:Class = getClass(skinTemplate.playButtonNormalState);
//或者使用这句
// var runtimeClassRef:Class = getClass("fl.video.skin.PlayButtonNormal");
trace (runtimeClassRef is Class);
var greeter:MovieClip = new runtimeClassRef();
addChild (greeter);
}
function getClass (className:String):Class
{
return loader.contentLoaderInfo.applicationDomain.getDefinition(className) as Class;
}

原创粉丝点击