今天在改一个flash的时候,发现本来只有200多kb的swf文件,后经过反编译,在导入到flash8.0重新生成swf文件之后,竟然有5.7M,这么大的体积在网页flash里面可是很大了!估计在网速稍微慢点的地方,能不能打开都是问题!这样的文件显然是不能用的!
于是通过百度获取到了这样的解释!
"
大家知道在flash中如果运用动态文本框从代码中加入数据,他的内容是动态的,而如果你想让这个动态文本框的字体变成你希望得到的字体,怎么办?自欺欺人的办法是:在此处选择 设备字体,这样的确可以让文字变成你需要的样式 但是当你将该文件放在其它的机器上的时候 而其它的机器恰好没有该字体的时候 那么你的字体样式会变成默认的_san,要解决这个问题 就要用到嵌入字体了 ,你可以嵌入数字 英文 中文 繁体的 简体的 等等 什么的都可以 编译运行~~在放到其它的机器上边 一样可以看到你所设置的这个字体了 。
但是这样导致的原因是 一个仅仅几百k的文件在加入字体后 便会生成几m的文件 如果该文件放在网上 速度肯定将使所有的浏览者吓跑。反编译人家的源文件也是一样的道理 如果作者的文件中嵌入了他机器上的字体 比如他机器上有10个字,然后发布出来。游戏很小 如果在你的机器上编译 你发现你的机器上有1000多个字体,那么完蛋了 你发布出来的文件的大小将是他的百倍,如果明白了这个道理 你应该明白如何避免了吧 呵呵~
"
通过生成报告: “ publicationsw.swf 影片报告 帧 # 帧 字节 总共 字节 场景 1 5610102 5610102 Scene 1 (AS 2.0 类导出帧) 场景 形状 字节 文本 字节 ActionScript 字节 Scene 1 0 0 3535 符号 形状 字节 文本 字节 ActionScript 字节 sprite 3 0 0 0 shape 4 (Up Over Down Hit) 28 0 0 button 5 0 0 0 sprite 6 0 0 0 shape 7 43 0 0 sprite 8 0 0 0 sprite 9 0 28 189 sprite 10 0 0 3300 shape 11 50 0 0 sprite 13 0 68 0 字体名称 字节 字符 Arial 5602532 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¤§¨°±·×àáèéêìíòó÷ùúüāēěīńňōūǎǐǒǔǖǘǚǜɑɡˇˉˊˋ˙ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωЁАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяё‐–—―‖‘’“”‥…‰′″‵※€℃℅℉№℡ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ←↑→↓↖↗↘↙∈∏∑∕√∝∞∟∠∣∥∧∨∩∪∫∮∴∵∶∷∽≈≌≒≠≡≤≥≦≧≮≯⊕⊙⊥⊿⌒①②③④⑤⑥⑦⑧⑨⑩⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▓▔▕■□▲△▼▽◆◇○◎●◢◣◤◥★☆☉♀♂ 、。〃々〆〇〈〉《》「」『』【】〒〓〔〕〖〗〝〞〡〢〣〤〥〦〧〨〩ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん゛゜ゝゞァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶーヽヾㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ㈱㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕丂七丄丅丆万丈三上下丌不与丏丐丑丒专且丕世丗丘丙业丛东丝丞丟丠両丢丣两严並丧... ActionScript 字节 位置 3535 Scene 1:Action Layer:1 458 sprite 10:Action Layer:1 2842 sprite 10:Action Layer:2 34 sprite 9:Action Layer:1 155 sprite 9:Layer 4:1:bttn(button 5) ”
在经过多次的尝试后,以及通过生成上面的生成报告,渐渐明白了,(的确因为flash基础比较差,到现在才明白!)没辙了,竟然想修改系统自带的arail字体,发现这个太难了!尝试了几次后,终于放弃!
话说回来,至于我为什么要反编译(因为flash水平有限,所以没办法!),是因为,用别人的是老外的多半是英文的,中文字体放上去就是乱码!所以才不得不反编译!
至于为了解决乱码问题,我又搜到了“Flash中与xml交互时不显示中文或显示乱码的解决办法”
原文如下“
1、去掉所有System.useCodepage = true;
很多人都说显示不出中文用这个代码,System.useCodePage = true; 是使用系统编码 不是消除乱码,如果系统是 gb2312 你load的也是 gb2312 那么 这样就不会乱码了,但是如果load有韩文怎么办??结果就是 仍然乱码。
2、XML用UTF-8编码,文件保存也用UTF-8编码
统一用utf-8的编码,可以正常显示中文,又不会因为有英文或其他字符出现乱码,除非有特殊需要,否则最好就用这个编码,这是个好习惯。
3、动态文本是不是嵌入字符了?
选中fla中无法正常显示中文的动态文本,点击属性面板的"嵌入"按钮,打开嵌入面板,发现设置了嵌入字符,点击嵌入面板左下角的"不嵌入"按钮..
PS:很多人实在显示不出中文,就嵌入中文,这种业余办法很有效,不过很大的弊端就是你的flash文件膨胀了好几倍,这个方法实在不可取!
4、检查文本框字体是否支持显示中文
很多人都是拿国外源码改的,针对以上几点做了修改后,发现还是无法显示,细心的朋友可以看一下文本使用的字体是否支持中文,所以建议改成“宋体”或者是“Arial”之类的标准字体!
”来源"http://wangrusheng5200.javaeye.com/blog/540026"
最主要的是第三点对我来说是最有用的!
就是删除嵌入字体!而最初的问题为什么导出的swf文件体积会那么大,也是因为这一条,flash嵌入了arail字体,甚至更多的字体!
其实对应第三条,我发现果然如此,然后,只是,因为我删掉了之后,导出了体积还是那么大!一开始,我怀疑是没有全部删完(就是不嵌入)!后面可能还有动态文本没有全部删完!
但是,找了了几遍之后,基本上是每个元件,每一帧,每个动作都找完之后,发现确实没有了!所以我才多次的百度,google,并且打算换个源文件,重新开始!n次的尝试时候,从上午到下午,徒劳无功之后,为了解决问题,
这个时候,已经在这个上面化了很长时间了,而此刻多次尝试之后,我越来越肯定了,就是一开始的那个动态文本嵌入字符没有彻底删除完毕!这次静下心来,重新开始找,果不其然被我找到了,还有一个影片剪辑的的动态文本没有删除嵌入!"
删除之后,这个flash的最大问题也就已经解决了!然后再一些小问题,也就是改改代码了!”其实,为什么要记录这次修改的历程!除了,为了解决这个问题,费了我很多的时间之外,最主要东西,也是想跟自己说,很多时候,一旦方向对了,办事才会更加有效率,解决问题的时候,只有知道问题的根本原因,才能迎刃而解!而学习呢,只有我们的目标明确了,才会事半功倍!而更多的时候,不是我们不明确,而是我们不够自信!常常在怀疑,总是在尝试!于是乎,时间总是在尝试和怀疑和踌躇中流逝!
在此我不禁想到了打井!十口井打一米,估计一滴水都不会有,而一口井打十米的话,才会源源不断!