2016-10-13 00:16:48 点击量:19 标签: 收藏本文
由于中文字体体积比较大,在项目需要使用不常见的中文字体时,就要用嵌入字体的方式来把指定字符嵌入到游戏中,下面是两种方法:
Embed的unicodeRange允许指定要嵌入字符的16进制unicode字符,如果字符变更了,还要重新编译生成swf,对于频繁更新的项目地带来不便。 以嵌入微软雅黑字体为例,代码如下:
- [SWF(width="100", height="50", backgroundColor="#CCCCCC")]
- public class TestFont extends Sprite
- {
- [Embed(source="c:/windows/fonts/msyh.ttf", embedAsCFF="false", fontName="DefaultFont",
mimeType="application/x-font", unicodeRange="U+4f60, U+597d, U+4e16, U+754c")]- public static var DefaultFont:Class;
- public function TestFont()
- {
- var text:TextField = new TextField();
- text.defaultTextFormat = new TextFormat("DefaultFont", 20, 0);
- text.text = "你好世界";
- text.embedFonts = true;
- text.width = 200;
- texttext.x = text.y = 10;
- addChild(text);
- }
- }
使用Flash嵌入字体即不用生成unicode字符,在字符发生变更后,也不用重新编译主程序,个人觉得算是最适合的方法了。 首先需要在Flash中通过 文本 -> 字体嵌入 菜单来嵌入字体:


使用时的代码如下:
- // 通过读取swf文件来获取swf中的字体类
- var skillFontClass:Class = ResLoader.getInstance().getClassByLinkName("SkillFont");
- // CuPlayer.com注册字体
- Font.registerFont(skillFontClass);
- // CuPlayer.com实列化字体
- var skillFont:Font = new skillFontClass();
- // CuPlayer.com设置字体格式
- var textFormat:TextFormat = new TextFormat();
- textFormat.font = skillFont.fontName;
- textFormat.size = 40;
- textFormat.color = 0x000000;
- // CuPlayer.com建立文本实例
- var skillText:TextField = new TextField();
- skillText.defaultTextFormat = textFormat;
- skillText.autoSize = TextFieldAutoSize.LEFT;
- skillText.embedFonts = true;
- skillText.text = "你好世界";
- addChild(skillText);
在网上找了半天没找到好用的字符转16进制Unicode的工具,索性自己写了一个,下载String2HexUnicode (需要.Net Framework 2.0)。

我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室