`
wgcode
  • 浏览: 578149 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

利用反射调用另一个swf里的代码库

阅读更多

或许我还是对flash了解不够深,虽然用它好多年了....还没有发现有更好的办法,例如flashDll,我就不知道怎么用才更好,可以达到他说的那样的可以使文件小很多。
他的做法是把很多在多个flash中使用的代码打包进一个swf里面去,然后给不同的swf调用,从而达到减小体积的目的。
但是我觉得即使是加载进行,但是在代码里进行了声明,最后还是会把代码编译进来,结果是体积还是没有减小.....(或许我这样说还是会有很多人不明白的.....具体看代码和效果吧)

package 
{
    import flash.display.Sprite;
    import flash.display.Loader;    import flash.events.Event;
    import flash.system.LoaderContext;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.utils.getDefinitionByName;
    
    [SWF (width=800, height=600)]
    
    public class Main extends Sprite 
    {
        private var loader:Loader;
        public function Main() 
        {
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoader);
            loader.load(new URLRequest("dll/AsWingDLL_1_3_0.swf"), 
                    new LoaderContext(false, ApplicationDomain.currentDomain));
        }
        
        private function onLoader(event:Event):void
        {
            var mangerClass:Class = getDefinitionByName("org.aswing.AsWingManager") as Class;
            mangerClass["initAsStandard"](this);
            
            var frameClass:Class = getDefinitionByName("org.aswing.JFrame") as Class;
            var frame:Object = new frameClass(this,"测试反射");
            var paneClass:Class = getDefinitionByName("org.aswing.JScrollPane") as Class;
            var pane:Object = new paneClass();
            var aertClass:Class = getDefinitionByName("org.aswing.JTextArea") as Class;
            var art:Object = new aertClass();
            
            //增加多行文本
            pane["append"](art);
            frame["setContentPane"](pane);
            frame["setSizeWH"](400, 300);
            frame["show"]();
        }
    }
}

 
很明显,可以看到体积非常小,
当然,有个AsWingDLL_1_3_0.swf文件是200k的,当然,你也可以加载网络上的代码库

如果不利用反射,直接在flash里进行声明,那么代码会变得大很多,有心人可以重写onLoader方法里的代码。不利用反射,直接new对象

老规矩,还是给上源代码

分享到:
评论
1 楼 yili16438 2011-07-09  
你好,我按照你的代码这样写,可是还是拿不到相应的声明啊?
但是用loader.contentLoaderInfo.applicationDomain.getDefinition(name:String)
是可以拿到的,这是为什么啊?

相关推荐

Global site tag (gtag.js) - Google Analytics