守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 1699|回复: 0
打印 上一主题 下一主题

[AIR技术] 用Embed引入的swf资源,取出里面的子资源

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52903
    钢镚
    1422

    开源英雄守望者

    跳转到指定楼层
    楼主
    发表于 2015-1-8 10:02:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    以前取出用Embed嵌入的资源都用这样的方法:
    1. [Embed(source="assets/project.swf", symbol="image1")]
    2. public var img:Class;
    复制代码
    然后实例化使用,今天打断点发现用Embed嵌入的资源运行时进入了MovieClipLoaderAsset类,看一下其构造方法:
    1. public function MovieClipLoaderAsset()
    2. {
    3.   super();  var loaderContext:LoaderContext = new LoaderContext();
    4.   loaderContext.applicationDomain = new
    5.    ApplicationDomain(ApplicationDomain.currentDomain);
    6.   
    7.   // in AIR...
    8.   // when embedding a SWF using @Embed, you are actively asking for the SWF
    9.   // to be executed, otherwise the SWF will fail loading due to
    10.   // Loader.allowLoadBytesCodeExecution.
    11.   //
    12.   // this property prevents accidentally loading a potentially dangerous
    13.   // SWF into the application sandbox.
    14.   //
    15.   // since this property is indirectly accessed, this should be revisited
    16.   // after AIR 1.x, as it may become deprecated
    17.   if ("allowLoadBytesCodeExecution" in loaderContext)
    18.    loaderContext["allowLoadBytesCodeExecution"] = true;  loader = new Loader();
    19.   loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
    20.               completeHandler);
    21.   loader.loadBytes(movieClipData, loaderContext);
    22.   addChild(loader);
    23. }
    复制代码
    发现添加了一个loader,于是发现只要把loader取出来就可以了
    1.                         [Embed(source="assets/project.swf")]
    2.                         public var swf:Class;
    3.                         
    4.                         private function onLoadComplete(event:Event):void
    5.                         {
    6.                                     var cls:Class = event.target.applicationDomain.getDefinition("image1") as Class;
    7.                                     var bmp:BitmapData = new cls();
    8.                         }
    9.                         
    10.                         private function init():void
    11.                         {
    12.                                     var c:* = new swf();
    13.                                     (c.getChildAt(0) as Loader).contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
    14. }
    复制代码
    取出图片成功

    不过Embed的方式其实效率并不是太高,而且还增加主工程的大小,所以还是建议用loader来加载资源
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
    收藏收藏 分享分享 支持支持 反对反对 微信
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2026-1-24 10:31 , Processed in 0.052999 second(s), 36 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表