峰之博纹 - Pelephone个人博客

flash actionscript3.0加载外部swf资源包

加载外部swf资源包编程是一个编写as3.0非常不错的美工与程序分离的方法。有很多人比较喜欢给Flash弄一个文档类,然后ctrl+enter,我曾经也是这种人。讨厌外部加载资源包,直接一个swf就全部搞定。对于as3.0初碰,这也很正常,因为有很多中文版的书箱就是这么教的。
如果你也已经把as3.0摸出感觉了,不如试试外部加载资源包的方法。专门生成一个没有程序,没有文档类的swf资源包。然后在写一个全是程序算法,但是没有图形剪辑的swf去加载资源包,再然后控制对象。Flex就是这种开发模式。
下面是方法:
1.在flash里面制作一个剪辑,然后在库里面右键->属性。为actionscript导出,在帧1中导出,写一个类定义类名例如下代码

package
{ import flash.display.MovieClip;
public class mc extends MovieClip{
public function mc():void{
}
}
}


2.导出生成资源swf文件,例如命名为test.swf;
3.在Flex或者FlashDevelop的主类中先加载资源文件,然后调用。例如下代码:


package 
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
public class Main extends Sprite {
public function Main():void
{
var url:String;
url="testMc.swf";
var req:URLRequest=new URLRequest(url);
var laoder:Loader = new Loader();

laoder.load(req);
laoder.contentLoaderInfo.addEventListener(Event.COMPLETE, comHander)
}
private function comHander(E:Event):void{
var target:MovieClip=E.target.content as MovieClip;
addChild(target);
target.x=0;
target.y = 0;

var tmc:mc = new mc();
addChild(tmc);
tmc.x = 200;
tmc.y = 200;
tmc.addEventListener(MouseEvent.CLICK,traceFun);
}
private function traceFun(E:MouseEvent):void{
trace(E.target);
}
}
}



4.ok了,调试一下。加载外部资源的控制跟直接放文档类效果一模一样。

-----------------------------------------------------------
如果你有项目已经开发住了一半,已经是用文档类的方式了。其实换外部资源加载的方式也基本不影响。只要把你的fla文件的文档类去掉为空,导出资源swf,然后把文档类的前部分加上加载代码,如下:

var url:String;
url="testMc.swf";
var req:URLRequest=new URLRequest(url);
var laoder:Loader = new Loader();

laoder.load(req);
laoder.contentLoaderInfo.addEventListener(Event.COMPLETE, comHander);

加载完后的文档类代码基本不用变。嘿,真方法。adobe考虑的还蛮周到的。
当然如果你已经用加载外部资源的方法写好了应用也可以换成文档类使用,不过把资源加载的代码删了就可以了。

呼,好久没玩Flash玩这么多时间了,又写完一篇,以后要多放点学习日记下行。最近迷上了FD,写个测试附件也用了FD的项目编译咯。

posted @ 2009-04-17 00:03  Pelephone  阅读(4149)  评论(0编辑  收藏  举报