为什么我无法在AS3中显示嵌入的字体?

8

我已经查阅了所有关于AS3中嵌入字体的主题,并尝试了所有解决方案。我可能错过了一些显而易见的东西,但是我不完全理解自己在做什么,请指导我正确的方向。许多答案涉及Flash Builder或其他工具,但我使用的是FlashDevelop,不知道是否有影响。

在我的Main.as文件中,我有这样一行代码:

[Embed(source = "assets/SKA_75_marul_CE_extended.ttf", 
fontName = "SKA_75_marul_CE_extended", 
fontWeight = "bold", 
advancedAntiAliasing = "true", 
mimeType = "application/x-font")] 
public static var SKA_75_marul_CE_extended:String;

这段代码位于一个扩展Sprite类Pointer.as的构造函数中:

var format:TextFormat = new TextFormat();
format.font = "SKA_75_marul_CE_extended";
format.color = 0xFFCCCC;
format.size = 20;           

var label:TextField = new TextField();
label.defaultTextFormat = format;
label.text = "test";
label.embedFonts = true;
label.antiAliasType = AntiAliasType.ADVANCED;

//label.setTextFormat(format);    --> I tried this too, didn't work...
label.defaultTextFormat = format;
label.x += img.width + 50;
this.addChild(label);

我发现唯一能让它显示任何内容的方法是关闭embedFonts。我尝试了嵌入C:/windows/fonts/arial.ttf,但没有成功。

似乎嵌入字体是一门无与伦比的黑魔法,经过1小时的挣扎,我必须承认失败了。请发送帮助。

更新:

这是可行的代码,结果是由于有正确的操作顺序...:

[Embed(source="assets/SKA_75_marul_CE_extended.ttf", 
                fontName = "myFont", 
                mimeType = "application/x-font", 
                fontWeight="normal", 
                fontStyle="normal", 
                unicodeRange="U+0020-U+007E", 
                advancedAntiAliasing="true", 
                embedAsCFF="false")]
        private var myEmbeddedFont:Class;

            var tf:TextFormat = new TextFormat( "myFont", 20,0xffffff );

            var t:TextField     = new TextField;
            t.embedFonts        = true; // very important to set
            t.defaultTextFormat = tf;
            t.text              = text;
            t.x += img.width + 50;
            t.width = 700;
            this.addChild( t );

谢谢您的回答。 "正确的操作顺序" 成为了关键。 - To Ka
1个回答

5
这绝对是一项“黑暗艺术”,让嵌入式字体正常工作。我首先会检查“SKA_75_marul_CE_extended”是否是字体元数据中实际的名称(我使用了Suitcase Fusion提取名称)。我也见过Flash无法嵌入TTF字体的情况(可能是无效的元数据导致嵌入系统故障)。如果是字体文件问题,我会继续使用已知的工作字体进行测试,直到找到实际问题为止。
我注意到一件事:“public static var SKA_75_marul_CE_extended:String;”...这不应该是Class类型吗?
以下是有关FlashDevelop字体嵌入的参考资料,由于某些问题而遇到困难: http://www.flashdevelop.org/community/viewtopic.php?p=28301

我终于让它工作了,我接受了你的答案,并将可工作的代码放在问题中。 - joon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接