`
0923xuyb
  • 浏览: 16896 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

将多个fxg文件打包成swf,加载swf并将其中的fxg作为类使用

    博客分类:
  • Flex
阅读更多

将多个fxg文件打包成swf,加载swf并将其中的fxg作为类使用

在利用fxg制作点状符号库的过程中,需要动态加载fxg文件,并将其作为类使用。然而flex自身并不支持flex文件的直接读取。虽然在flex项目中,可以将fxg文件直接放在flashbuilder4的源文件中,一起编译后可直接作为类使用,但是这样fxg文件需要事先编译,和程序不能脱离,达不到动态加载的目的。

 

为了解决上述难题,一个可行的解决方案是将fxg文件打包成swf,然后加载swf并从中析取fxg作为类使用。对于这种方法,我将分两部分加以说明。

 

1.将多个fxg文件打包成swf

据我所知,有两种方法可以做到这一点。

 

第一种方法是在FlashBuilder4中创建一个新的flex库项目,将fxg文件置于src文件夹中,编译后生成swc。将swc解压后有两个文件:catalog.xml,用于各类/资源的配置文件;library.swf,存放各种类/资源。

 

这种方法十分简单,但最大的缺点在于依赖FlashBuilder。试想最终用户想要根据自己制作的fxg生成点状符号库,还必须依赖flashbuilder是一件多么痛苦的事。换句话说,作为开发者,这点还可接受;但是作为需要自己更改符号库的最终用户,这点则是不可接受的。

 

于是我尝试了第二种方法:精简Flex的sdk。

 

利用Flex的sdk中的命令可以将fxg打包成swc。具体如下:

compc -include-sources E:\fxg2swc\bin\fxg\ -output e:\fxg.swc

 

sdk中有许多与此不相干的东西,都可以删除掉,最后可精简至13M左右。这样就可以作为一个小工具提供给最终用户。

 

使用这种方法会遇到的一个问题是生成的swc会很大,造成这点的原因在于其将libs下的一些文件也打包在内,可通过更改sdk中的frameworks/flex-config.xml文件加以解决:将<library-path>中<path-element>libs/player/{targetPlayerMajorVersion}.{targetPlayerMinorVersion}</path-element>和<path-element>libs</path-element>放到<external-library-path>中。

 

2.从swf中析取fxg并作为类使用

其思路是利用loader类加载library.swf,然后利用从catalog.xml提取的类名从loader中提取类,然后利用类生成类对象。

 

(1)加载library.swf

 

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE ,onFxgComplete);
loader.load(new URLRequest("fxg/library.swf"));
 

 

(2)根据类名提取类

private function getClassByName(className:String,loaderInfo:LoaderInfo):Class

		{
			if (loaderInfo.applicationDomain.hasDefinition(className))
				return loaderInfo.applicationDomain.getDefinition(className) as Class;
			else
				return null;
		}	

  (3)根据类生成类对象

private function onFxgComplete(event:Event):void

		{
			var arr:Array = _xmlParse.getClassNameArray();
			for(var i:int = 0; i < arr.length;i++)
			{
				var cls:Class = this.getClassByName(arr[i],event.target as LoaderInfo);
				var fxg:DisplayObject = new cls();
				registerClassAlias(arr[i],cls);					
				_symArr.push(fxg);
			}
		}
 

 

 

 

 

1
2
分享到:
评论
1 楼 huyan0501 2011-06-22  
楼主!你好!关于你这篇文章中提到的动态加载外部库的方式,我测试过好多次,都没有成功。我一直都报错。

ReferenceError: Error #1065: 变量 ResourceRef 未定义。
at global/flash.utils::getDefinitionByName()

请问你能不能给我个调试成功的例子啊。huyan05170138@163.com
当然如果能在回复中给予指导也行,谢谢了

相关推荐

    fxg 矢量图编辑工具

    fxg 矢量图编辑工具 实现基本绘图功能,可导出fxg源码

    PyPI 官网下载 | fxg2svg-0.1.3b0-py3.4.egg

    你可以调用库提供的函数,例如`fxg2svg.convert()`,并传入FXG文件路径和输出SVG文件路径作为参数。 4. **处理错误和异常**:在使用过程中,要注意可能出现的错误和异常,如文件读取错误、格式不支持等。应适当地...

    家兔实验fxg.fxg

    家兔实验fxg.fxg

    fxgEditor

    "fxgEditor"是一个专注于图形编辑的工具,其核心可能是一个基于Flash的图形用户界面(GUI),因为"fxgeditor.swf"文件是Flash应用程序的典型代表。Flash平台曾经广泛用于创建交互式网页内容,包括复杂的图形编辑器。...

    Python库 | fxg2svg-0.2.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:fxg2svg-0.2.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    CVE-2018-9995_dvr_credentials.rar_CVE-2018_FXG_burp CVE-2018-999

    标题中的"CVE-2018-9995_dvr_credentials.rar_CVE-2018_FXG_burp CVE-2018-999"提及了几个关键概念,首先,CVE(Common Vulnerabilities and Exposures)是用于识别网络安全漏洞的标准化系统。"CVE-2018-9995"指的是...

    flash动画制作软件

    SWFDecompiler4.5是一款专业的Flash反编译工具,它能够将SWF文件解码为FLA或FXG格式,这些是Flash原始工作文件的格式。通过反编译,用户可以: 1. **查看并编辑图形元素**:提取的FLA文件包含所有矢量形状、图层和...

    flex Papervision 3D 事例

    描述中提到的“导入即可使用”,意味着这个压缩包包含了一整套可运行的项目文件,可能包括FLA或FXG文件、AS源代码、资源文件(如图片、字体或声音)等。开发者只需将这些文件导入到他们的Flex开发环境中,如Flash ...

    备份&恢复iFIX.pdf

    * 建议为每个新节点、新系统创建一个新的.SCU文件,而不是使用备份的.SCU文件 * 数据库和驱动器配置文件应该被保存或者被导出成一个*.CSV文件,以防止文件在备份、恢复过程中产生错误 通过遵循本文档中的步骤和注意...

    flash动画可以用来制作礼物

    2. **硕思闪客精灵**:这是一个专门用于Flash动画处理的工具,它可以将SWF格式的Flash文件转换为FLA或FXG等可编辑格式,方便用户进一步修改、编辑动画内容。这对于那些想要定制或个性化Flash动画的人来说非常有用。 ...

    cairngorm2.2.1 与 flex4的集成. error错误解决

    Flex 4,也称为Gumbo,是Adobe Flex SDK的一个重大更新,引入了Spark组件模型和FXG图形格式,为开发者提供了更多的设计自由度和性能提升。 集成Cairngorm 2.2.1与Flex 4时,首先需要确保你已经正确安装了Flex ...

    flex4新特性展示(中文版)

    设计师可以直接在Adobe设计工具中创建图形资源,并将其导出为FXG格式,然后轻松地集成到Flex应用中。 - **动画与效果**:FXG支持动画和图形效果,这意味着开发者可以直接在FXG文件中定义动画序列,并在运行时应用...

    Spark皮肤相关文档

    - **避免直接继承**:在创建新皮肤时,一般不建议直接继承现有的皮肤类,而是复制现有皮肤类的源码并创建一个新的类。这样做更容易复用皮肤到多个组件实例或多组件上。 - **单个实例的外观调整**:如果仅需要改变...

    ghostcat源码(附带实例)

    -SWF解析器,从ByteArray中播放声音,直接控制AVM1的动画类容。 -丰富的文本缓动,部分文字Filter,渐变色文字,字符差异对比,ANSI转码,URL解码,中文数字,拼音码,这是一个单独的底层包 -完全由FLASH实现的拼音...

    irregular shaped button

    另一个常见的方法是使用SVG格式,它支持非矩形形状并提供矢量图形,这意味着无论放大多少倍图像都不会失真。在HTML中,可以直接内联嵌入SVG代码,或者通过CSS背景图像属性引用SVG文件。 3. **CSS(层叠样式表)**...

    Illustrator插件开发指南

    此外,一个插件文件可以包含多种插件类型,例如图形创建插件可能会实现多个filters和一个插件工具。 总体而言,Illustrator插件开发指南为开发者提供了从基本概念到高级功能实现的全面指导,不仅包括了Illustrator ...

    IFIX老版本备份到IFIX4

    - 导出当前系统的安全文件,并将其保存为`Security.RPT`文件。 ##### 2. 关闭SCU中的安全功能 - 在SCU中关闭安全功能以准备备份。 ##### 3. 手动备份Dynamics\HTR目录下的文件 - 备份`.CSV`, `.CFG`和`.DAT`文件。...

    Java3D用其自己定义的场景图和观察模

    在Flex中,使用标准组件(如FXG文件)就可以实现这样的效果,FXG是从设计工具(如Fireworks)导出的矢量图形格式,可以轻松集成到Flex项目中。通过在Spark Group容器中放置多个楼层平面图,然后应用简单的3D变换,就...

Global site tag (gtag.js) - Google Analytics