java - studio - libgdx ubuntu
ReputaciĆ³n de fuente LibGDX RTL? (2)
A partir de ahora, realmente no hay una forma de renderizar el texto de derecha a izquierda, como lo muestra este hilo al respecto. Entonces, la única manera de hacerlo realmente es invertir el texto con StringBuilder
y luego mostrarlo. Una forma más eficiente de renderizar el texto invertido es crear un método que muestre el texto en consecuencia, para que no tenga que invertirlo cada vez que intente escribir texto de derecha a izquierda. Si crea un método, podrá implementar el texto RTL en chats, nombres u otros gráficos que requieran fuentes RTL.
También recomiendo convertir su mapa de bits a un archivo .ttf para que sea fácil usar su fuente personalizada y al mismo tiempo mantener una buena calidad. A continuación, puede utilizar FreeTypeFontGenerator
para representar su fuente de forma agradable. Si no puede convertir su Bitmap
de Bitmap
en una fuente, también puede usar su método para mostrar texto en el siguiente método. Una muy buena alternativa es la biblioteca Hiero . Puede seleccionar la casilla de verificación de texto RTL.
Aquí hay un ejemplo de un método que podría crear para representar el texto (usando FreeTypeFontGenerator
):
// Keep the generator here so that it is not created each time
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fontFile.ttf"));
public void renderRTL(float x, float y, int fontSize, String text) {
batch.begin(); // Lets you draw on the screen
// Reverses the text given
StringBuilder builder = new StringBuilder();
builder.append(text);
builder.reverse();
String outputText = builder.toString();
// Creates the font
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = fontSize;
parameter.characters = "ALL HEBREW CHARACTERS"; // Put all your Hebrew characters in this String
scoreFont = generator.generateFont(parameter);
scoreFont.setColor(Color.BLACK);
scoreFont.draw(batch, outputText, x, y); // Actually draws the text
generator.dispose(); // Clears memory
batch.end();
}
Asegúrese de agregar todas estas dependencias en su archivo build.gradle
(en la sección de dependencias):
compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
Opcionalmente, puede agregar un parámetro de color (en formato RGBA) a su método para obtener más funciones. ¡Espero eso ayude!
Estoy creando una aplicación que debe admitir dos idiomas, inglés y hebreo.
El problema es que el hebreo es el idioma occidental de derecha a izquierda y el inglés de izquierda a derecha, y LibGDX no admite fuentes RTL.
Creé el mapa de bits para la fuente y todo funciona
Pero cuando escribo en hebreo, escribirá las palabras al revés. Tengo una solución para esto cuando escribo únicamente en hebreo, simplemente invierto las palabras usando un StringBuilder
, pero eso es una solución económica. Pero, ¿y si quiero implementar un chat o un nombre de personaje?
Por lo que puedo ver, la solución más fácil es usar Heiro . Si nos fijamos en este hilo Hiero Rendering fuentes arábigas de derecha a izquierda donde hay una disposición reciente para acomodar RTL
A partir de ahí se vuelve cada vez más difícil. Hay bastantes preguntas sobre este tema (un ejemplo que muestra el idioma no occidental de derecha a izquierda en libgdx (Android) ) y menos soluciones.
Tiene la opción de crear una biblioteca de glifos de cadenas para palabras o expresiones de uso común, aunque este es un proceso laborioso de configurar y hay una sobrecarga en términos de tiempo cuando se usa el chat, como ocurre con la inversión de cadenas.
Esta discusión en libgdx github soporta el renderizado de fuentes complejas (chino, árabe, ...) . entra en estas y más opciones, incluido el trabajo realizado para soportar Windows sridharsundaram / complexscriptlayout , que, aunque no es Android, puede valer la pena investigar para obtener más ideas de desarrollo.
En el lado positivo, hay un número creciente de desarrollos recientes en este frente, por lo que los formatos RTL y bidi deberían ser cada vez más fáciles para los desarrolladores que usan libgdx.
Es de interés la compatibilidad de este tema con el Soporte de Renderización de Texto de Derecha a Izquierda # 787, ya que hay rastros de migas de personas con el mismo problema para desarrollar recursos.