Libgdx: Las fuentes generadas por FreeTypeFontGenerator tienen caracteres faltantes con ciertas configuraciones de parámetros de fuente.

Creado en 18 jul. 2016  ·  3Comentarios  ·  Fuente: libgdx/libgdx

Detalles del problema

Estoy usando algunas fuentes chinas y parece que las fuentes de mapa de bits generadas por FreeTypeFontGenerator tendrán caracteres faltantes con ciertas configuraciones FreeTypeFontParameter . A continuación, mostraré algunos ejemplos.

IMG01 [test_font.ttf, tamaño de fuente 16, ancho del borde 2] Se ve bien.

image 1

IMG02 [test_font.ttf, tamaño de fuente 24, ancho del borde 3] Faltan caracteres.

image 2

IMG03 [microsoft_yahei_bold.ttf, tamaño de fuente 24, ancho de borde 3] Se cambió a una fuente de Microsoft más prometedora y la situación parece empeorar.

image 3

Pasos de reproducción / código

Códigos básicos para IMG02:

public class GameContext extends ApplicationAdapter {

    private BitmapFont font;

    private SpriteBatch batch;

    <strong i="23">@Override</strong>
    public void create() {
        FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("test_font.ttf"));
        String characters = Gdx.files.internal("characters.txt").readString("UTF8");
        FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
        parameter.size = 24;
        parameter.color = Color.WHITE;
        parameter.borderColor = Color.BLACK;
        parameter.borderWidth = 3;
        parameter.characters = FreeTypeFontGenerator.DEFAULT_CHARS + characters;
        font = generator.generateFont(parameter);

        batch = new SpriteBatch();
    }

    <strong i="24">@Override</strong>
    public void render() {
        Gdx.gl.glClearColor(0.9f, 0.9f, 0.9f, 1.0f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        batch.begin();
        font.draw(batch, "This is a test string zzz...", 10, Gdx.graphics.getHeight() / 2);
        batch.end();
    }

    <strong i="25">@Override</strong>
    public void dispose() {
        font.dispose();
    }

}

Nota: El archivo characters.txt incluye algunos caracteres chinos y signos de puntuación que necesito usar en mi juego.
Puede encontrar el proyecto de ejemplo aquí .

Versión de LibGDX y / o dependencias relevantes

1.9.3

Seleccione las plataformas afectadas

Solo probado en Android y Windows.

  • [x] Android
  • [] iOS (robovm)
  • [] iOS (MOE)
  • [] HTML / GWT
  • [x] Windows
  • [] Linux
  • [ ] Mac OS

Comentario más útil

Agregue la siguiente línea para verificar si eso hace alguna diferencia:

FreeTypeFontGenerator.setMaxTextureSize(2048);

Todos 3 comentarios

Agregue la siguiente línea para verificar si eso hace alguna diferencia:

FreeTypeFontGenerator.setMaxTextureSize(2048);

Agregue la siguiente línea para verificar si eso hace alguna diferencia:

FreeTypeFontGenerator.setMaxTextureSize(2048);

¡Realmente funciona! ¡Muchas gracias!

Duplicado de # 3525

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

chongbo2013 picture chongbo2013  ·  3Comentarios

tomcashman picture tomcashman  ·  3Comentarios

ghost picture ghost  ·  3Comentarios

BenMcLean picture BenMcLean  ·  4Comentarios

andrejp88 picture andrejp88  ·  4Comentarios