当我们有多个很小的素材,比如一些矢量的素材图标,这些图标的体积通常都比较小,如果每个都放到一个swf里就会出现太多的swf文件,造成文件太碎,管理不方便.那么我们就需要将这些相关的素材整合到一个swf文件里,同时又要能被加载后访问到,就用到了库元件导出类.这样就能被加载来访问到了.
流程
- 将每个素材分别都做成库元件.
- 将每个素材的库元件绑定AS类.
- 发布成swf文件.
- MainSWF加载SubSWF.
- 加载完成后,通过反射获取到SubSWF里库元件绑定的AS类.
- 获取到的这些AS类进行操作. 将SubSWF里的库元件绑定到AS类
简单代码
首先在SubSWF里将flash库元件导出绑定AS类,例如MySymbol:
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.display.DisplayObject;
// 说明要加载的子swf的文件路径
var req:URLRequest = new URLRequest("subSwf.swf");
var loader:Loader = new Loader();
// 一定要用loder.contentLoaderInfo添加侦听,不然不会触发COMPLETE事件
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(req);
function completeHandler(e:Event):void
{
// 移除侦听,防止内存泄露
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
// 需要先反射获取SubSWF里的MySymbol类才能进行操作
var MySymbolRef:Class = loader.loaderInfo.applicationDomain.getDefinition("MySymbol") as Class;
// 获取到类后要实例化一个显示对象才行操作
var mySymbol:DisplayObject = new MySymbolRef() as DisplayObject;
// 获取到mySymol的示例后进行想要做的操作
mySymbol.rotation = 30;
// 将mySymbol加载到显示列表才能显示
this.addChild(mySymbol);
}
结语
该方法同样适用于SubSWF的文档类,如果想更方便的获取SubSWF里的类定义,可以将SubSWF加载到当前应用程序域.具体方法请看这里.
这样就能容易的操作单个swf的不同元件了.同样也可以为对文档类进行操作.
» 转载请注明来源:www.litefeel.com » 《操作子SWF(二)使用反射》
» 本文链接地址:https://www.litefeel.com/operate-subswf-2/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/operate-subswf-2/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
This post was last modified on 2019 年 03 月 04 日 00:29
View Comments (3)
支持一下吧!
这个博客做的不错啊,我很喜欢这样的风格,请问可以和我做个友情连接吗?我的网站http://www.27y.org
呵呵,不错,我来也