命令行编译工具mxmlc
http://domlib.com/articles/161???? 最近在研究怎么实现针对自己的UI框架的XML可视化编辑器,发现flex的命令行编译工具mxmlc蛮好用的,就尝试了一下。简单的思路是:用xml编辑UI;然后自己写一个XML?to?AS代码的文本编译器;再用mxmlc实时编译as文本为swf文件;最后在编辑器里加载进来显示并编辑属性并把改变的属性值填回到xml文件。就实现对xml文件的实时预览编辑了。 ???????mxmlc?有个参数非常不错:-keep-generated-actionscript,可以把编译结果的AS文件保存下来。我试着对Flex原始的ButtonSkin.mxml进行编译,得到了对应的as文件和swf文件。通过研究生成的as文件,我周末写了两天,就把针对自己框架的XML?to?AS代码的编译器写好了。并且可以兼容Flex原始的皮肤文件,直接把Flash?Catalyst导出的mxml皮肤编译成我的框架里支持的代码。这样的好处就是以后可以直接使用强大的Flash?Catalyst为我的UI框架制作皮肤了,跟Flex流程一样。后期我打算再添加个UIElement组件,兼容针对游戏开发里更常用的swf导出的素材。实现统一的可视化编辑。 ????????但是当我尝试单独用库编译一个生成的ButtonSkin.as为swf的时候,遇到点问题。编译成功的swf文件加载进来总是报错:找不到mx.core::ByteArrayAsset类定义。我又仔细检查了一遍,我的UI框架里没有任何一处有引用过这个Flex的类啊。折腾了半天,最后发现了。。你随便新建一个纯Actionscript工程,FB除了帮忙把核心的playerglobal.swc引用进来了,还默认引用了另外四个库。core.swc,osmf.swc,textLayout.swc,authoringsupport.swc。 ????????而那个mx.core::ByteArrayAsset类就是在core.swc里面。原来即使你使用纯AS代码而不使用Flex框架写项目,mxmlc编译器也是要引用一个最小子集的Flex框架的(core.swc里的代码在framework.swc完全包含)。通过查看编译后生成的代码,我发现只要使用了原标签[Embed],mxmlc就会默认帮你生成一些Flex代码,其中就用到了mx.core::ByteArrayAsset。而在命令行编译的时候,mxmlc加载的默认配置文件flex-config.xml是只设置了playerglobal.swc的引用的。所以默认编译的时候缺少了那四个库,当你用到了特定的原标签时,生成的代码就会报错了。我的框架里就用到了[Embed]。 ????????解决办法就是编译时附加上以下的配置文件,设置下其他四个库的引用.加载配置文件的参数是:mxmlc?-load-config+=config.xml
<?xmlversion="1.0"?>
?
<flex-config>
?
<compiler>
?
<keep-generated-actionscript>false</keep-generated-actionscript>
?
<library-path>
?
<path-element>E:编程文档FlashDomLibbinDomLib.swc</path-element>
?
<path-element>D:Program?FilesAdobeAdobe?Flash?Builder?4.6sdks4.6.0frameworkslibscore.swc</path-element>
?
<path-element>D:Program?FilesAdobeAdobe?Flash?Builder?4.6sdks4.6.0frameworkslibsauthoringsupport.swc</path-element>
?
<path-element>D:Program?FilesAdobeAdobe?Flash?Builder?4.6sdks4.6.0frameworkslibsosmf.swc</path-element>
?
<path-element>D:Program?FilesAdobeAdobe?Flash?Builder?4.6sdks4.6.0frameworkslibstextLayout.swc</path-element>
?
</library-path>
?
<source-path>
?
<path-element>src</path-element>
?
</source-path>
?
</compiler>
?
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
?
</flex-config>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用 AJAX,局部刷新 GridView 进行数据绑定的简单实现
- sqlite3函数使用说明2
- swift – 是否有可能拥有一个带有泛型参数的实例数组而不知
- c# – 每次path.getrandomfilename会生成一个唯一的文件名吗
- 程序从片内地址0开始,但为什么链接地址又设0x30000000,那
- oracle – PL SQL – 将数值转换为varchar(百分比)
- react-native之远程图片修改后APP不更新
- jedis 源码阅读三——PipeLine
- c# – 在Visual Studio中进行xamarin更新后,Android 5.1.1棒
- Quick cocos2dx-Lua学习笔记