近期项目发现,在使用release发布项目包,图片找不到了,而debug下面又有图片。

后来发现,原来图片被另外一个组件嵌入了。

下面例子展示了组件嵌入和不嵌入图片的区别

<?xml version=”1.0″ encoding=”utf-8″?> 
<s:Application xmlns:fx=”http://ns.adobe.com/mxml/2009″ xmlns:s=”library://ns.adobe.com/flex/spark” xmlns:mx=”library://ns.adobe.com/flex/mx” minWidth=”955″ minHeight=”600″> 
<fx:Declarations> 
<!– Flex项目release后图片资源不见了—-图片资源采用嵌入与不嵌入的区别 更多示例请访问www.waylau.com–> 
</fx:Declarations> 
<s:VGroup> 
<s:Panel title=”嵌入测试”> 
<s:HGroup> 
<s:Button id=”btn1″ icon=”@Embed(source=’images/close.png’)”/> 
<s:Button id=”btn2″ icon=”images/close.png”/> 
</s:HGroup> 
</s:Panel> 
<s:Panel title=”未嵌入测试”> 
<s:HGroup> <s:Button id=”btn3″ icon=”images/myIco.png”/> <s:Button id=”btn4″ icon=”images/myIco.png”/> </s:HGroup>
</s:Panel> 
</s:VGroup> 
</s:Application>

btn1嵌入了的图片,btn2就无法引用了, 而btn3、btn4没有嵌入,所以都可以引用。 看release的文件btn1嵌入的图片close.png是看不到的,已经嵌入进swf, 而myIco.png是存在的。

嵌入图片和不嵌入图片各有利弊,嵌入图会加快访问图片的速度,但同时也增大了编译文件, 以下是一个错误的示例,多个文件嵌入了同一份资源save24.png,使得每个swf文件都变大了。要按照实际需要选择

在上面的例子中当多个控件引用的是同一个资源时,嵌入图片用简单的变量访问方式,在多个地方引用所嵌入的资源。 这是变量就代表资源,提高写代码的效率

<?xml version=”1.0″ encoding=”utf-8″?> 
<s:Application xmlns:fx=”http://ns.adobe.com/mxml/2009″ xmlns:s=”library://ns.adobe.com/flex/spark” xmlns:mx=”library://ns.adobe.com/flex/mx” minWidth=”955″ minHeight=”600″> 
<fx:Declarations> 
<!– Flex项目release后图片资源不见了,图片资源采用嵌入与不嵌入的区别 更多示例请访问www.waylau.com–> 
</fx:Declarations> 
<fx:Script> 
<![CDATA[ [Embed(source="images/close.png")] [Bindable] public var imgCls:Class; ]]> 
</fx:Script> 
<s:VGroup> 
<s:Panel title=”嵌入测试”> 
<s:HGroup> 
<s:Button id=”btn1″ icon=”{imgCls}”/> 
<s:Button id=”btn2″ icon=”{imgCls}”/> 
</s:HGroup> 
</s:Panel> 
<s:Panel title=”未嵌入测试”> 
<s:HGroup> 
<s:Button id=”btn3″ icon=”images/myIco.png”/> 
<s:Button id=”btn4″ icon=”images/myIco.png”/> 
</s:HGroup> 
</s:Panel> 
</s:VGroup> 
</s:Application>