Flash多人开发的时候,常常需要把ui资源分成多个fla文件,若这些fla文件需要用到的很多相同的元件,就要考虑到资源重复利用的问题了。
假设你建了个comm.fla的文件,里面有个元件叫P03_07,你要在其他fla文件中都能使用。Ctrl+C和Ctrl+V这种方式我们就不考虑了,这对维护来说是一个灾难,要是你在100个fla中都用了这个元件,一改就要到100个fla文件中去一个个改,显然非常麻烦。
我们用另一种方法。
首先打开comm.fla文件,新建一个叫“元件1”的影片剪辑,设置该元件的属性,“为Actionscript导出”打上勾,类名写上mytest,url写成comm.swf。
然后在comm.fla下新建一个test.fla文件,在共享栏的“为运行时共享导入”打上勾,url跟上面一样写上comm.swf,然后点击浏览按钮,找到comm.fla,选中刚才新建元件。点确定按钮。再重新打开这个元件的属性面板,即使刚才你为该元件的类命名了,flash还是会自动把这个类名设置成你所导入的那个元件的类名。
这两步完了之后分别给这两个fla文件生成swf文件,将生成的swf文件放在同一文件夹下。
下面进行代码测试。加载test.swf文件并获取comm.swf中的元件:
{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
loader.load( new URLRequest( " test.swf " ), new LoaderContext( false ,ApplicationDomain.currentDomain));
}
private function onComplete(e:Event): void
{
var cls:Class = loader.contentLoaderInfo.applicationDomain.getDefinition( ' mytest ' ) as Class;
var mc:MovieClip = new cls(); // as MovieClip;
trace( ' mc ' + mc);
addChild(mc);
}
这样comm.fla中的元件在其他任何fla文件中都可以使用,要修改也只用改comm.fla一个文件,重新发布即可。另外还有一点需要说明的是如果comm.fla中的元件在其他fla文件中被放到场景上,并且为该元件指定了名称,需要为comm的共享元件手动写一个类,比如上面的comm.fla中的mytest元件,要写这样一个类:
{
import flash.display.MovieClip;
/* *
* ...
* @author dragonWorrior
*/
public class mytest extends MovieClip
{
public function mytest()
{
}
}
}
有点麻烦,但也是举手之劳而已。