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.

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() { } } 

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 .

  • libGDX consigue el color del pixel del sprite o de la textura
  • Libgdx particleEffect de rotación
  • Producción de efectos de borrado mediante libgdx y OpenGL ES
  • Posicionamiento de botones inteligente y automático
  • (Java LibGDX) ¿Cómo puedo cambiar el tamaño de mis texturas en LibGDX?
  • En libgdx, ¿cómo puedo obtener información del botón de retroceso?
  • Cómo detectar el final de la acción en Libgdx (0.9.7) de android
  • Android / Libgdx: Detectando el botón multitarea
  • Android.os.Bundle no se puede resolver en el proyecto de libgdx Android
  • Libgdx y Leadbolt
  • Libgdx textura imagen transparente hacer
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.