Loader的load方法和loadBytes方法LoaderContext参数

(1)在看代码的时候还发现一个以前没有这么注意的问题,也mark一下。

关于Loader的load方法和loadBytes方法LoaderContext参数的问题。。

 

要加载某个SWF到自己的安全域内,需要给Loader.load方法指定一个LoaderContext对象。LoaderContext对象的securityDomain属性设置为当前的安全域(SecurityDomain.currentDomain)。通过这样的加载方式,父SWF授信给子SWF,而子SWF的授信则需要通过跨域策略文件。

也就是说LoaderContext=null 的情况下则已加载的内容将保留在自己的安全域中。

 

而使用loadBytes和load不同的是,它不是用URL来加载外部内容,而是直接加载以ByteArray的形式加载对象。

由于ByteArray与域名之间没有关联,所以用loadBytes方法加载的对象将直接进入当前安全域内。因为你在加载包含这些字节对象之前往往都要经过某种信任授权,所以这通常是安全的。

即:loadBytes如果未指定 context 参数或者该参数引用了 null 对象,则内容将加载到当前的安全域(在 Flash Player 安全文档中称为“导入加载”的进程)中。具体来说,如果执行加载的 SWF 文件通过将远程 SWF 并入到其代码中来信任远程 SWF,则执行加载的 SWF 可直接将其导入到自己的安全域中。

 

(2)项目代码中很多的工程带有DLL的后缀,其实是用来把swc中的定义连接然后打包成swf用于动态加载,实现动态链接库的功能。为什么要这么做呢?这源于swc和swf的区别。

在Flash Builder中用Actionscript写的类可以打包成swc或swf,

在Flash CS中制作的元件也可以打包成swc或swf文件,

一个swc或swf文件中可以包含多个类或元件,

每个元件会映射成一个类,

因此,在Flash Builder中的类和在Flash CS中的元件是等价的。

swc和swf文件的使用区别是:

swc 作为类库导入到项目中直接实例化即可使用,就像自带的flash包下面的类一样使用;

swf 则需要用Loader加载进来,再用getDefinition方法取得类后,才可以实例化使用;

使用swc的好处是方便、快捷,缺点是swc文件会编译到项目输出的swf文件里面,

从而增加最终swf文件的大小,也许对于一些小项目这并非缺点;

使用swf的好处是在众多的网页游戏中,玩家没有耐心等待漫长的加载过程,

所以在需要的时候才加载会提高游戏体验效果,而这些实时加载的类或资源就打包成swf文件;

Flash Player有一套专门的加载swf文件的机制,而加载的swc文件则无法解析使用。

使用swf的缺点是麻烦,需要加载,需要处理事件,需要取得相应的类才能使用。

但现在的网页游戏中大都使用swf作为资源文件,swc作为第三方类库使用。

 

posted @ 2013-03-28 10:53  ☆A希亿  阅读(1245)  评论(0编辑  收藏  举报