fonts - Artefactos de representación de BitmapFont
libgdx rendering (2)
Después de jugar un poco, pensé en lo que debe ser pirateado para que funcione.
La esencia: reducir todos los glifos para que no se superpongan.
Mi solución en Scala :
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]))
}
EDITAR (6. 4. 2015): código actualizado para trabajar en Scala 2.11.4
y LibGDX 1.5.3
.
Tengo la escala de configuración de la GUI para ocupar toda la pantalla (ventana). Los widgets de control están bien, pero el escalado de fuentes es terrible: hay artefactos de glifos vecinos (debido a algunos errores de redondeo, supongo).
Puedes verlo claramente en el lado derecho de T:
Intenté establecer varios valores en el área de relleno en Hiero, pero todos esos valores afectan la forma en que se representa la fuente: agregan espacio entre los caracteres en el renderizado, no solo para una textura como yo quería.
¿Alguna idea de cómo arreglar estos artefactos? No quiero la generación dinámica de fuentes o fuentes múltiples, quiero una escala ordinaria del vecino más cercano (voy a buscar pixeles). Supongo que esto es un error en libGDX 1.2.0 .
Ajusté la solución de monnef anterior para el uso de Java de esta manera:
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;
}
}
}
Tenga en cuenta que, además, glyph.v2 también se ajusta, sin esto todavía tengo artefactos.
Nota: Esta es una solución temporal y probablemente debería solucionarse editando la fuente.