BitmapFont渲染工件

时间:2014-07-29 09:03:11

标签: fonts libgdx rendering

我已经设置了GUI的缩放以占据整个屏幕(窗口)。控件小部件很好,但字体缩放很糟糕 - 来自相邻字形的工件(因为我认为有些舍入错误)。

你可以在T的右侧清楚地看到它:

我尝试在Hiero的填充区域中设置各种值,但所有这些值都会影响字体的渲染方式 - 它们会在渲染中添加字符之间的空间,而不仅仅是我想要的纹理。

知道如何修复这些文物吗?我不想要动态字体生成或多种字体,我想要普通的最近邻缩放(我想要像素一样)。我假设这是 libGDX 1.2.0 中的错误。

2 个答案:

答案 0 :(得分:1)

经过一番摆弄后,我想出了什么需要被黑客攻击才能让它发挥作用。

要点:缩小所有字形不重叠。

我在中的解决方案:

  def fixFonts(fontsMap: ObjectMap[String, BitmapFont]) {
    def fixFont(font: BitmapFont) {
      for {
        glyphPage <- font.getData.glyphs.toSeq.filter(_ != null)
        glyph <- glyphPage.toSeq.filter(_ != null)
      } {
        glyph.u2 -= 0.001f
      }
    }

  fontsMap.iterator().asInstanceOf[java.util.Iterator[Entry[String, BitmapFont]]].
    asScala.foreach { e => fixFont(e.value)}
  }

  def load() {
    skin = manager.get(SKIN_FILE)
    fixFonts(skin.getAll(classOf[BitmapFont]))
  }

EDIT(2015年6月4日):更新了可在Scala 2.11.4LibGDX 1.5.3中使用的代码。

答案 1 :(得分:0)

我已调整monnef's以上解决方案使用如下:

public static void fixFont(BitmapFont font) {
    for (Glyph[] page : font.getData().glyphs) {
        if (page == null) {
            continue;
        }

        for (Glyph glyph : page) {
            if (glyph == null) {
                continue;
            }

            glyph.u2 -= 0.001f;
            glyph.v2 -= 0.001f;
        }
    }
}

请注意,另外glyph.v2也会被调整,如果没有这个,我仍然会有文物。

注意:这是一种解决方法,可能应该通过编辑字体来修复。