【问题标题】:How to get the "style" from a classic textField when loaded by code?代码加载时如何从经典文本字段中获取“样式”?
【发布时间】:2013-07-25 22:35:45
【问题描述】:

我需要获取放置在舞台上的 textField 中使用的样式,并通过代码来完成。

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

当我分析代码中的 textField 时,我找不到获得该样式的方法。

你知道有什么办法吗?

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

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

谢谢。

【问题讨论】:

    标签: actionscript-3 flash fonts styles textfield


    【解决方案1】:

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

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

    也就是说,字体系列在 AS3 中的工作方式略有不同(遗憾的是,这不是 Adob​​e 的错,而是操作系统的错)。例如,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:Stringbold:Boolean 属性来区分。但是,由于 Flash 使用相同的报告属性覆盖嵌入的对象(或根本不覆盖),因此您在任何时候只有 4 种系列样式中的 2 种可用:常规版本和粗体版本。

    希望能澄清事情。

    【讨论】:

    • 我正在使用 getTextFormat 方法。但它并没有告诉我什么是风格。实际上,没有样式属性或类似的东西。顺便说一句,我总是嵌入字体,否则我会在清晰度方面得到糟糕的结果。我错过了什么吗?。
    • 这取决于你所说的“风格”。 getTextFormat 返回具有以下属性的对象:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…。您可以使用相同的对象并将其应用于新的 TextField 并复制外观。正如您从上面给出的示例中看到的那样,该特定字体的属性中没有提到“Semibold”,实际上显示为带有TextFormat.bold = true 的“Myriad Pro Light”,但它是 Myriad Pro Semibold,这就是你以编程方式定义它。
    • 关于“在清晰度方面的糟糕结果”,您可以使用antiAliasType 属性(help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…)打开抗锯齿以提高可读性。只需myTextField.antiAliasType = flash.text.AntiAliasType.ADVANCED
    • 关于样式 我说的是 Flash Pro 中的样式选项卡。在 Flash Pro 中,您有字体系列选项卡,在其下方有一个样式选项卡。样式选项卡有不同的选项。粗体、常规、斜体,有时,它具有 textFormat 类中不存在的选项,例如半粗体。发生这种情况时,我找不到检索和复制它的方法。因为使用 getTextFormat() 我只得到:字体:Signika,粗体:false。就是这样。
    • 我们讨论的是同一个问题。请参阅上面的更新说明。也就是说,semibold 似乎与 Signika 常规的报告方式相同,这是字体系列的创作方式存在问题。您可以尝试在 FontLab 之类的工具中编辑字体,为每种字体指定一个唯一的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2020-03-26
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多