注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 

日志

 
 

在 mxmlc 编译的 swf 中使用 swfc 编译的 swf  

2009-11-25 22:33:53|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
SWFTOOLS 是一套 swf 文件相关工具,其中的 swfc 能把 .sc 格式的源文件编译成 .swf 文件。我以前以为他是没有办法向 ActionScript 导出资源的,不过这两天我最终还是找到办法能够在 mxmlc 编译的 .swf 中使用 swfc 导出的资源,最关键的是,能够静态链接到这些资源。
首先,编写 .sc 文件的时候,要再多写一个 .as 文件,在里面编写要生成的 swf 的主类,主类要从 flash.display.Sprite 派生出来(当然 flash.display.MovieClip 也可)。如果资源中用到了 .png 之类指令定义的形状,主类中也得声明。
ResourceMain.as
package {    import flash.display.*    public class ResourceMain extends Sprite {      public var png1:Shape    }  }
其次,.sc 文件要用 .action 指令引用定义主类的 .as 文件。
ResourceMain.sc
.flash bbox=200x200 version=6 fps=50 name="ResourceMain.swf" compress  .action filename="ResourceMain.as"  .png png1  # ...  .end  
这样一来,就可以用 swfc 编译一个有主类的 swf 了。你可以用 Loader 加载它,然后调用 Loader 的 contentLoaderInfo.applicationDomain.getDefinition("ResourceMain") 方法来获取这个类。
如果要在编译时就找到这个类的符号,想要直接 import 这个类,还要做以下两个步骤:
  1. 用 compc 编译那个主类的 .as 文件。这样编译出来的 swc 只包含类定义,而没有资源素材。
  2. 用 mxmlc 编译主程序的时候,用 -compile.extern-library-path 而不是 -compile.library-path 引用上一步编译出来的 swc
用这种办法编译出来的主程序认识资源的符号,但是并不包含资源,所以必须在运行时用 Loader 把资源 swf 加载到ApplicationDomain.currentDomain 之后再用那些用到了该资源的函数或者类,不然就会有运行时异常。
var loader:Loader = new Loader  loader.load(new URLRequest("resource.swf"), new LoaderContext(false, ApplicationDomain.currentDomain))
如果不想在运行时加载,而想静态链接,用 swfcombine 把资源 swf 捆进主程序即可。

顺便说一句,swfc 不支持中文变量名或类名,我写了一个补丁让它支持,在这里下载:
  评论这张
 
阅读(670)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018