看一看TextField API Reference和getTextFormat()
方法。 (耶!)
它返回一个TextFormat
对象,其中包含该 TextField 的完整定义,然后可以通过setTextFormat()
.
也就是说,字体系列在 AS3 中的工作方式略有不同(遗憾的是,这不是 Adobe 的错,而是操作系统的错)。例如,Myriad Pro 有 Regular、Light、Semibold 和 Bold。然而,一旦嵌入,只显示两个实际的字体名称,区分它们的唯一方法是设置TextFormat.bold = true
.
有趣的是,省略其中一种伴随字体的嵌入不会引发错误,而是在您仅嵌入 Myriad Pro Regular 而不是 Myriad Pro Bold 的情况下,设置TextFormat.bold = true
将在常规上执行仿粗体(这自然会质量比实际的粗体字体低得多,但是......它有效)。
希望这能说明问题。
更新
我调查了西格尼卡,它显然遭受了严重的身份危机。为了举例说明这一点,嵌入整个字体系列并运行以下命令:
var fontList:Array = Font.enumerateFonts();
for( var i:int = 0; i < fontList.length; i++ ) {
trace("Font Name: " + fontList[i].fontName + ", " + fontList[i].fontStyle )
}
这将跟踪环境中存在的每种字体的列表。可悲的是,无论您如何嵌入字体(以编程方式或通过库导入),字体都会覆盖其他系列条目(假设因为它们以相同的方式报告而不区分环境)。
// Myriad Pro Results:
Font Name: Myriad Pro, regular
Font Name: Myriad Pro, bold
Font Name: Myriad Pro Light, regular
Font Name: Myriad Pro Light, bold
对 Myriad Pro 系列运行相同的查询实际上报告了四个条目,没有重叠,而 Signika 只会报告 4 个条目中的 2 个。
// Signika Results:
Font Name: Signika, regular
Font Name: Signika, bold
我之前所说的仍然有效:使用上面的 API 方法将产生一个TextFormat
完全描述正在使用的字体的对象。这些由对象上的name:String
和bold:Boolean
属性来区分。但是,由于 Flash 使用相同的报告属性覆盖嵌入的对象(或根本不覆盖),因此您在任何时候只有 4 种系列样式中的 2 种可用:常规版本和粗体版本。
希望能澄清事情。