Libgdx dibujar caracteres chinos
Me gusta imprimir texto en chino en mi aplicación.
1. Cuando intento esto, la pantalla estará vacía. No hay error en la consola.
- Múltiples montajes en un cuerpo o múltiples cuerpos?
- LibGDX - Obtener deslizar hacia arriba o deslizar derecha, etc?
- Mi anuncio de AdMob no está dibujando pero ¿está ahí? (LibGDX Admob 6.4.1)
- Introduzca la manipulación de claves en Libgdx TextField
- Acciones de los actores en libgdx
Crear método:
FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("fonts/DFLS1B.TTF")); font = gen.generateFont(40, "好", false);
Método de renderización:
spriteBatch.setColor(1, 1, 1, 1); spriteBatch.begin(); font.draw(spriteBatch, "好", 10, 100); spriteBatch.end();
2.When que intento esto, 3 caracteres chinos diferentes aparecen en la pantalla pero no tengo ninguna idea porqué estos caracteres donde dibujan. No hay conexión entre asd y los tres personajes
Crear método:
FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("fonts/DFLS1B.TTF")); font = gen.generateFont(40);
Método de renderización:
spriteBatch.setColor(1, 1, 1, 1); spriteBatch.begin(); font.draw(spriteBatch, "asd", 10, 100); spriteBatch.end();
¿Alguien sabe cómo dibujar caracteres chinos en libgdx correcto (yo uso la versión actual de libgdx)? Por ejemplo: ¿Cómo estás? – Ni hao ma? Hola
Saludos
EDIT: Aquí está un ejemplo completo que mostrará caracteres chinos esperados en la pantalla. He descargado la fuente de aquí: http://www.study-area.org/apt/firefly-font/
package com.mytest; import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.scenes.scene2d.Stage; public class ChineseFontTest implements ApplicationListener { private Stage stage; private SpriteBatch spriteBatch; public BitmapFont font; @Override public void create() { stage = new Stage(800, 800); spriteBatch = new SpriteBatch(); FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("fonts/fireflysung.ttf")); font = gen.generateFont(40, "好你吗", false); } @Override public void dispose() { stage.dispose(); } @Override public void render() { Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); spriteBatch.setColor(1, 1, 1, 1); spriteBatch.begin(); font.draw(spriteBatch, "你好吗", 10, 100); spriteBatch.end(); } @Override public void resize(int width, int height) { } @Override public void pause() { } @Override public void resume() { } }
- AppWarp se bloquea en Android, Libgdx
- For-loop en código de sombreado que trabaja con un número codificado pero no con una variable uniforme
- Cómo dibujar un bitmapfont en una etapa en libgdx?
- Dibujar objeto personalizado curvado en LIBGDX?
- Añadiendo Admob a Libgdx juego
- No se puede enlazar una acción. LibGDX
- LinearLayout analógico dentro de la tabla en LibGDX
- No se pueden obtener eventos en mi libgdx Actor
Vaya a http://www.angelcode.com/products/bmfont/ y consiga BMFont y utilícelo para mirar su fuente. También puede pregenerar archivos de fuentes de mapa de bits libgdx con él. El problema es que su fuente no es una fuente unicode.
Cuando está escribiendo código Java, el símbolo "好" se traduce al valor U + 597D. El archivo de fuente ttf que está utilizando es una fuente no-unicode de la vieja escuela. La forma en que estos archivos de fuentes más antiguas funcionan es que reemplazan una letra como "a" con una imagen diferente. "A" es U + 61. Por lo tanto, en su programa la letra "a" se convierte en U + 61 que se asigna a un símbolo de carácter chino pero "好" con un valor de U + 597D no.
Puede continuar usando su fuente y buscar la posición de cada carácter para poder usar el número correcto. No utilice "a" en su lugar utilice algo como (char) 0x61 por lo que es un poco menos confuso. O…
Simplemente obtenga una fuente unicode válida que contenga el símbolo "好" en U + 597D.
El cargador freetype en libGDX realmente crea un BitmapFont
. Para ello, necesitará una lista de caracteres. La lista predeterminada es sólo alfanuméricos. Para procesar unicode, necesitará reemplazar / añadir esa lista con los caracteres unicode que necesite.
El siguiente código debería ser de ayuda (estoy usando AssetManager
):
FreeTypeFontLoaderParameter parameter = new FreeTypeFontLoaderParameter(); parameter.fontParameters.size = size; parameter.fontFileName = "fonts/DFLS1B.ttf"; parameter.fontParameters.color = Color.WHITE; parameter.fontParameters.characters = characters; // <-- here you give it the unicode list parameter.fontParameters.magFilter = Texture.TextureFilter.Linear; manager.load(sz, BitmapFont.class, parameter); manager.finishLoadingAsset(sz);
Nota : Si utiliza el gestor de activos, deberá configurar los cargadores como en su ejemplo:
FileHandleResolver resolver = new InternalFileHandleResolver(); manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));
También he encontrado esta respuesta .