?[1b]关于 Coding ActionScript 3.0系列
[/1b]
?
我打算开始转入AS3的开发,之前的AS2代码将逐步转移过来,在编码过程中可能获得一些有价值的信息,我将和大家一起分享和讨论。有更好的建议,也可以在这里提出来。我不保证我采用的方法是最好的,也不保证代码没有任何问题,应此,在使用我的代码产生的任何问题,我都不负责。同时,请注意,不要将这些代码用于商业用途,如果必须,请与我联系。
?外部swf库资源载入及使用[1b] [/1b]如果不知道怎么载入swf文件,请先看
Coding ActionScript 3.0 [3] 外部swf文件载入。
很多的时候我们并不希望我们的项目就是一个超级大的swf文件,尤其是在as3中,你可以做到代码与界面的分离,所以,将资源放在一个一个的swf文件中成为必要。那么如果载入和使用这些外部的swf资源呢?不要着急,先喝口水。。。。
在as2中你可以在加载完swf库文件后使用attachMovie将元件添加进来,看上去很方便,其实,as3提供了更方便的方式来,下面请听我慢满道来。。。。
--------------------------------------传说中最优美的分割线--------------------------------------
?
?
首先我们要来了解一下as3的一个新特性,那就是attachMovie这个方法没有了(废话),取代它的是addChild。任何的MC我们都需要new 出来,然后addChild另一个MC中,所以,你加载进来的swf文件事实上也是一个mc(实际是DisplayObject,DisplayObject是什么,你得看帮助了。),对于一个DisplayObject,你可以做什么?attachMovie?不,这个方法没有了!那么。。。new ?,对了!首先,你可以在库文件中(我这里把它叫:lib.fla),建立一个元件,class名称为Lib,至于里面的动画什么的,你自己做。然后在主场景第一帧写这样的代码:
function getMC(id:String):MovieClip{
?try{
??var ClassReference:Class = getDefinitionByName(id) as Class;
?}catch(e:Error){
??trace(e);
??return new MovieClip();
?}
?var instance:Object = new ClassReference();
?return instance;
}
完了一可以测试一下:
var mc:MovieClip = getMC("Lib");
this.addChild(mc);
如果你可以看到你的元件被加载,那么恭喜你,你成功跨出第一步了。这里需要提到的是getDefinitionByName方法,他是as3的一个新方法,你可以通过ClassName来获得Class对象。
OK,你可以建立你的主程序了,我这里建立了一个main.fla文件,在第一帧加入这样的代码:
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHanlder);
loader.load(new URLRequest("lib.swf"));
//资源加载完成
function loadCompleteHanlder(e:Event):void{
?var lib:MovieClip = e.target.content.getMC("Lib");
?this.addChild(lib);
?lib.x = lib.y = 100;
}
然后,发布!
如果你没有成功,你可以下载我的原代码看看。看有什么地方不对。
[1b]点击下载原文件[/1b]
这里需要注意的是e.target.content,有关这个部分,你可以去看看事件对象相关的内容。还有,如果你getMC是一个不存在的,在这个例子中程序会返回一个新的mc,其实,你也可以不这样,让程序出错,你去捕获。好了,这个部分就到这里,由于问的人很多,我只好写出来了,呵呵。希望对你有点帮助。
本文转自:http://www.5uflash.com/flashjiaocheng/Flash-as3-jiaocheng/1962.html