23

我有一个多语言项目(目前有 13 种语言),它使用“Helvetica Neue”的许多不同字体变体,大部分来自 LinoType Pro 字体集(包括西欧字符)的粗体、浓缩和常规切割,西里尔字母也是如此。我们将来可能会添加中文和日文的变体。

我已将项目设置为使用不同的 CSS 样式表并分别加载每个版本的字体,具体取决于用户选择的语言,因此我可以有不同的行高、字距调整和/或字体大小,以使所有内容保持原始外观,即使字体看起来一点也不相似。

所有这一切都很好,除了一个问题:由于某种原因,所有西里尔字母似乎都被取代了。它们出现在正确基线下方 2-3 个像素处,并且实际上突出到文本字段的底部边框,即使该字段设置为自动调整大小也是如此。当我使用 时textfield.getCharBoundaries(),所有值似乎都是正确的,即使它们显然没有正确呈现。

为了使一切看起来整洁,我当然可以根据语言和字体大小手动上下移动所有有问题的文本字段,但我想知道是否有某种方法可以防止或至少检测这种位移以便自动处理调整——Flash Player 应该有一些关于事物如何呈现的信息,不是吗?你们中有人遇到过类似的问题吗?或者更好:一个解决方案?

4

7 回答 7

2

你的 Helvetica Neue 版本有西里尔字母的字形吗?如果不是,那么您将获得字体后备,并且用于俄语的字体实际上不是 Helvetica Neue,而是具有其他指标的其他东西。如果你去中文,你会有更多这样的东西,因为 Helvetica Neue 绝对不包含中文字形:-)

另一方面,真正考虑 TLF。国际支持要好得多,Flash Player 10.0(引入了 TLF)已经超过 2.5 年了。尝试说服您的客户要求使用古老技术的高级国际排版是不合理的。这是一个非此即彼的交易。

于 2011-05-28T09:13:08.333 回答
2

我对中文有这个问题,但仅限于 OS X 和 Windows。我也无法弄清楚如何自动获取角色真实位置的适当指标。我最终得到了一个粗略的函数,每当我设置一个 TextField 时我都会调用它:

  public static function adjustPositioning(field:TextField):void
  {
    if(OS != "MAC") return;
    var fontSize:int = field.defaultTextFormat.size as int;
    field.y += fontSize/5;
  }

我是在代码中而不是在 IDE 中设置我的所有 TextField,所以这很容易。不过,我想这是您不想要的解决方案!

于 2011-01-26T13:37:16.123 回答
1

听起来您使用的字体在西里尔字母的字形中有实际错误。所以这里有一个非常简单但令人讨厌的解决方案。编辑字体。这听起来很疯狂,但没有那么多西里尔字形,而且您似乎想要一种字体。编辑它,分发更正的版本,你就完成了。

Fontforge 相当不错,我敢打赌,一旦设置好,您可以在一个小时内编辑字体。

于 2011-05-20T19:18:37.947 回答
1

我遇到过类似的问题,我尝试过的所有解决方案都非常复杂,或者有一些缺点:

  • 使用 TLF。我知道您不想这样做,但这是一个非常安全(但复杂)的解决方案。

  • 不要使用“可读性”抗锯齿,使用“动画”。字体看起来最差,但它们的指标应该更可靠一些。

  • 尝试使用 cacheAsBitmap 或空过滤器(即 BlurFilter(0,0,0))。它在某些情况下会起作用,但不是全部。

  • 手动将所有文本字段缓存为 BitmapData。这应该显示更可靠的指标,但可能会很棘手。您甚至可以使用 getColorBounds 即时修复此问题,以获得“真实”指标。但同样,这一切都非常棘手,需要大量测试。

于 2011-01-14T20:13:18.357 回答
1

您是否尝试过使用固定宽度的字体?

于 2011-07-14T13:59:39.023 回答
1

您是否尝试过简单地修改字体以调整 1px 左右。只需向上(或向下)移动字母我并没有完全阅读每个人写的所有内容。虽然我目前没有安装它,但我相信我对编辑器的偏好是“Fontlab”。

于 2011-06-18T16:26:41.517 回答
1

我在阿拉伯语方面遇到过类似的问题。似乎 Adob​​e 应用程序总是存在非英语语言的问题。在某些语言中,在 Flash Player 中,文本看起来已损坏,但在 Flash Player 中播放 Flash 时,问题不存在。

我不确定什么可以解决您的问题,但您可以尝试一些解决方法。

试试这个解决方法,但它会变得更复杂: - 在每次按键时,将按下的字符作为图像插入。它可以解决您的问题,但编写代码需要更多时间

于 2011-01-14T09:43:42.973 回答