每个字体字符都应该有自己的kern表吗?

时间:2014-11-15 08:37:54

标签: fonts kerning

我正在设计一种用于存储字体的文件格式,它将用于我需要在屏幕上绘制ASCII文本的游戏中。起初我认为我需要为字体中的每个字符保留一个单独的kern表,但在研究之后我发现游戏中使用的许多字体文件格式根本没有任何kern表(例如,Arma的FXY字体{ {3}}),他们只为每个字符使用一个偏移量来确定下一个字符的绘制位置。这对于简单的ASCII文本是否足够?是否有任何缺点/限制?

1 个答案:

答案 0 :(得分:1)

"简单的ASCII文本"与kerning无关。在简单ASCII范围内,一些(可能)最丑陋的字距调整候选 ;即使只有全文大写的文字,你也可以期待" AV"和" TA"连击。

是否在文本引擎中包含字距调整取决于帖子中未提及的一些因素:

  1. 字体的类型。 square-ish字体不需要与完全抗锯齿的高质量字体一样精确的字距调整。模仿8x8等宽字体系统字体的字体不需要字距调整;具有偏心设计的字体(例如,非常宽的" T")可以。
  2. 字体大小(以像素为单位)。对于8x8像素字体,我根本不会打扰。
  3. 计算字符串宽度和在屏幕上绘制文本的开销。对于典型的游戏,例如射击游戏,绘图文本只是次要的,应该尽可能快地发生。对于冒险游戏中的大量文本,您需要更好的输出。
  4. 即使仅必须检查 可能的字距的每个组合的行为都是耗时的,无论是否导致调整。为了获得最快的性能,您可以为每个字符每个字符设置一个调整值列表 - 基本上,对于96个字符,您需要96 * 96个查找。任何其他算法都是可能的(例如,每个字符的链表)但速度较慢 - 并且可以使用更少的内存。

    此外,每个可能的字符组合都不需要字距信息。您应该设计左右内置空白区域的字体,即所谓的"侧面轴承"。这个'自然'间距只需要尽可能少的组合进行调整。

    总而言之,它取决于。最好的方法是尝试两种方式:不使用和使用字距调整。估计对表现的积极影响对表现的负面影响,并决定你喜欢哪一个。