我已经完成了有关在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;
这存在于一个名为Pointer.as的扩展Sprite的构造函数中:
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 );
答案 0 :(得分: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