0

我需要获取放置在舞台中的 textField 中使用的样式,并通过代码执行此操作。

问题是,就我而言,粗体和斜体是不够的,因为我的风格是半粗体。

当我分析代码中的 textField 时,我找不到获得这种风格的方法。

你知道有什么方法可以做到这一点吗?

换句话说,当我得到textFormat时,我需要知道Flash中使用的字体的样式是什么。

例如,如果我的字体是“Signika”,我需要知道样式是 Semibold。现在,我只得到“Signika”。如果我检查粗体样式,它会起作用,因为粗体是真的。但这就是我能从中得到的所有信息。

谢谢。

4

1 回答 1

1

看一看TextField API ReferencegetTextFormat()方法。 (耶!)

它返回一个TextFormat对象,其中包含该 TextField 的完整定义,然后可以通过setTextFormat().

也就是说,字体系列在 AS3 中的工作方式略有不同(遗憾的是,这不是 Adob​​e 的错,而是操作系统的错)。例如,Myriad Pro 有 Regular、Light、Semibold 和 Bold。然而,一旦嵌入,只显示两个实际的字体名称,区分它们的唯一方法是设置TextFormat.bold = true.

在 Flash 中获取字体系列的问题。

有趣的是,省略其中一种伴随字体的嵌入不会引发错误,而是在您仅嵌入 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:Stringbold:Boolean属性来区分。但是,由于 Flash 使用相同的报告属性覆盖嵌入的对象(或根本不覆盖),因此您在任何时候只有 4 种系列样式中的 2 种可用:常规版本和粗体版本。

希望能澄清事情。

于 2013-07-26T03:31:39.493 回答