事因
平常我们做页游项目的时候,比较少用到从FlashCS里导出SWC里面的图片,就算有也是Png,jsp是非常少的了。对于习惯使用FlashBuilder的人来说,如果要用图片,就直接采用嵌入图片了。
[Embed(source="assets/play.png")]
所以这次做个小游戏的时候,因为贪图方便,把资源全部做到FlashCS里面,然后生成swc,最后在FlashBuilder里引用。结果就出现问题了,发现使用jpg的时候,竟然是一片空白,然后输出宽和高,发现是0
查找出现原因
首先要考虑一下是怎么出现这个问题,得想出解决方案。
1. 刚开始怀疑是FlashCS导出SWC的问题,然后把SWF解压,提取出library.swf,通过反变异软件查看,图片是在里面,而且是存在的
2. 既然SWC没问题(其中也检查了版本号,也在合理范围之类),那是不是FlkashBulder的问题呢?4.7和4.6是区别的,于是用FlashBuilder4.6测试SWC,结果是正常的。那么就很明显了。FlashBuilder的环境下才有问题。
那么问题来,因为不想轻易换编辑器,再次考虑SWC的问题,是不是图片导出格式有问题。
所以再次比较了一下可以正常使用的图片,最终发现一种可以显示出来的方式。
解决方案
这里只是在FB4.7下面的解决方案,是在FlashCS里修改图片到处方式。
在FlashCS的库里,设置选中图片的属性,在压缩方式那里,从JPG修改为PNG,问题得到解决。
测试代码例子
为了完整表达这个东西,我写一个相关的测试例子。
RoleImg 是直接导入的png图片
ChapterJpg 是直接导入的jpg图片
ChapterPng 是导入后修该为png的图片
运行结果是:
FlashBuilder4.6
FlashBuilder4.7
测试代码:
/**
*
* @author sodaChen
*/
[SWF(width="572", height="510", frameRate="30", backgroundColor="#ffffff")]
public class TestSwcImg extends Sprite
{
public function TestSwcImg()
{
//直接导入的jpg
addBitmap("ChapterJpg",new ChapterPng(),0,0);
//导入的jpg,设置为png格式的
addBitmap("ChapterJpg",new ChapterJpg(),0,255);
//直接导入的png
addBitmap("role",new RoleImg(),200,0);
}
private function addBitmap(key:String,bitmapData:BitmapData,x:int,y:int):void
{
trace(key + "width:" + bitmapData.width);
var bitmap:Bitmap = new Bitmap(bitmapData);
bitmap.x = x;
bitmap.y = y;
addChild(bitmap);
}
}