真·FLASH AS3 中文字体嵌入法

看了网上那么多扯淡的FLASH中英文字体嵌入的方法,真是非常火大,大部分都是一些对FLASH特性不熟悉的人写的,或是直接照搬老外的做法,要知道老外只有26个字母,中文(基础字库)可是有成千上万个呢,所以~~~不要再看那些所谓的AS3高手的狗屁方法了,中国人还是要有自己的特殊包字库法—新点心的真·FLASH字库绑定法!
【效果】
http://www.solongbus.com/solongbus/200901/Sample.swf
先说下应用领域一般遇到需要嵌入字体的情况,无外乎以下2种:
1、需要用到美观的界面文字,用程序大量生成或是需要经常更新的
2、需要用到旋转、缩放、渐变等效果
以往的做法是在编译的时候直接嵌入字库,Flex里可以在嵌入的时候选择字符编码范围,比较麻烦,Flash IDE里只能整个字库,中文字库都是以兆为单位的,整个嵌入明显不切实际,下面举个例子:
以微软雅黑为例,每嵌入100个不重复的字,大约只增加20k的体积,足以应付大多应用,而如果嵌入整个微软雅黑的字库,生成的swf文件则达到了3.9Mb
下面开始说重话:网上大部分”AS高手“的文章都是用的这些搓方法,还吸引了N多点击量,误导了无数人。
【原理】
言归正传,说回我的自定义字库方法的原理:
利用Flash IDE中手工创建的TextField上的嵌入指定字库来减小嵌入字库的体积,然后用帧脚本配合绑定类来生成TextField,再直接返回给调用者。
【缺陷】
这种方法可以使文件体积和文字效果得到两全,不过也有一些缺陷:
1、在输入文本的状态下,用程序直接控制文本,会导致输入文本焦点永远丢失。
2、无法在已生成的TextField上绑定字库
【字库创建步骤】
以下配图以FLASH CS3中文版为例,CS4的操作基本相同,只是界面位置有细微区别
1、新建一个.fla
2、如下图,在场景里新建一个动态文本,选择需要嵌入的字体并输入需要嵌入的文字即可,字体大小、颜色、对齐之类的参数都不用理会

3、如下图,点击属性面板最右侧的“嵌入”

4、弹出一个窗口,点击“自动填充”,就可以把刚在在文本框内输入的文字自动嵌入。当然你也可以直接选择窗口上提供的其他字符加载,比如大写、小写、数字都是比较常用的。

5、如果需要嵌入种字体,则只需要重复步骤2~4,创建多个动态文本即可。
6、按Ctrl+F8新建一个影片剪辑,更改“类”为自己喜欢的名称(后面加载代码中的getDefinition会需要这个名字),更改“基类”为bm.view.font.FontLib。确认本文提供的类放在与这个fla同级目录下,即可点击“确认”按钮了。

7、按ctrl+enter,即会生成一个嵌入了指定文字的字库swf了。
8、调用方法参见下文提供的范例代码。
【范例和源码】
最后放上范例和源码(FLASH IDE和Flex都可以跑,带一个TextField修饰类),希望能给需要的人带来帮助
namipan下载
http://www.namipan.com/d/fontLibSample.rar/150564cf8f47a31f5af0d1b7641a792f2e38310fb9f00000
.


Comments
好啊。有个小问题想要请教。能否加qq767853 or msn ekea@hotmail.it ? 详谈下。谢谢了
flash动态加载中文,如果不嵌入中文字型 就不能正常显示,如果嵌入中文 导出文件又太大了有8-9m左右,该怎么解决?
请教!
可以加我QQ:417773943吗
把需要显示的字导出就可以了,没必要全部导出
切,那要是读外部文件,什么中文字都要用上的时候怎么办啊?
看看这个吧
http://bbs.blueidea.com/thread-2719878-1-1.html
两种方式应用范围不同~我文章里也说了我这种方法的用途范围
“什么中文字都要用”的话,也不可能用你那种方法的,一篇文章要是有300个不重复字,就意味着有300次网络请求且总文件大小相比字库大很多,缓存在内存里的话,一个字一个swf的存储方式也可能要比字库方式恐怖许多
呵呵,谢谢你写的教程。辛苦拉
不管别人怎么说,我只说一句,您太无私了,这么好的类,写的真的很专业。尤其是unit包中的两个类,不错。
好类,好想法,而且源文件写的很清晰。
谢谢!
有一块,关于“//第1步.先将下面这个getTFfromSwf函数塞入swf的一个影片剪辑(MovieClip)的帧脚本中”
这里,这个函数,可以放到FontLib类中,而不必写在影片剪辑里。
收回我的那句话吧,把getTFfromSwf函数放到类中是行不通的,只有放在影片剪辑里才行。不好意思。呵呵,不过,这是为什么呢?
时间轴上的帧脚本在被编译为swf的时候已经固定,不会在被loader加载后再次编译,这是个Flash里比较有意思的特性,还可以利用这个特性做些别的事情~~~
偶blog里还有另外一篇绑定字库的文章,操作比这个简单点
Write a Comment