我需要将textField中使用的样式放在舞台上,并通过代码执行此操作。
事实是,在我的情况下,粗体和斜体是不够的,因为我的风格是半粗体。
当我在代码中分析textField时,我无法找到获得该样式的方法。
你知道有什么办法吗?。
换句话说,当我得到textFormat时,我需要知道Flash中使用的字体的样式。
例如,如果我的字体是“Signika”,我需要知道该样式是Semibold。现在,我只得到“Signika”。如果我检查大胆的风格,它是有效的,因为大胆是真的。但这就是我可以从中得到的所有信息。
感谢。
答案 0 :(得分:1)
看见TextField API Reference和getTextFormat()
方法。 (耶!)
它返回一个TextFormat
对象,其中包含该TextField的完整定义,然后可以通过setTextFormat()
将其应用于另一个TextField。
也就是说,字体系列在AS3中的工作方式略有不同(遗憾的是,不是Adobe的错,而是操作系统)。例如,Myriad Pro有Regular,Light,Semibold和Bold。然而,一旦嵌入,只显示两个实际的字体名称,区分它们的唯一方法是设置TextFormat.bold = true
。
有趣的是,省略其中一个伴随字体的嵌入不会引发错误,而是在您只嵌入Myriad Pro Regular而不是Myriad Pro Bold的情况下,设置TextFormat.bold = true
将执行常规的人造粗体(自然会比实际的粗体字体质量低很多,但是......它有效)。
希望能够解决问题。
<强>更新强>
我调查了Signika,它显然遭受了严重的身份危机。为了举例说明,嵌入整个字体系列并运行以下命令:
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种:常规版本和粗体版本。
希望澄清事情。