Libgdx рисовать китайские персонажи

Мне нравится печатать китайский текст в моем приложении.

1. Когда я попробую это, экран будет пустым. На консоли нет ошибок.

Создать метод:

FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("fonts/DFLS1B.TTF")); font = gen.generateFont(40, "好", false); 

Метод рендеринга:

 spriteBatch.setColor(1, 1, 1, 1); spriteBatch.begin(); font.draw(spriteBatch, "好", 10, 100); spriteBatch.end(); 

2.Когда я пробую это, на экране появляются 3 разных китайских персонажа, но я понятия не имею, почему эти персонажи, где рисуют. Нет связи между asd и тремя символами

Создать метод:

 FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("fonts/DFLS1B.TTF")); font = gen.generateFont(40); 

Метод рендеринга:

 spriteBatch.setColor(1, 1, 1, 1); spriteBatch.begin(); font.draw(spriteBatch, "asd", 10, 100); spriteBatch.end(); 

Кто-нибудь знает, как правильно нарисовать китайский символ в libgdx (я использую текущую версию libgdx)? Например: как дела? – Ni hao ma? – 你 好 吗?

Приветствую


EDIT: Вот полный пример, который покажет ожидаемые китайские символы на экране. Я скачал шрифт отсюда: 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() { } } 

Перейдите по адресу http://www.angelcode.com/products/bmfont/ и получите BMFont и используйте его, чтобы посмотреть на свой шрифт. Вы также можете создать с ним файлы шрифтов bitmap libgdx. Проблема в том, что ваш шрифт не является шрифтом юникода.

Когда вы вводите код Java, символ «好» переводится в значение U + 597D. Файл шрифта ttf, который вы используете, является шрифтом не-юникода старой школы. Как эти старые файлы шрифтов работают, так это то, что они заменяют букву «a» другим изображением. «A» – U + 61. Поэтому в вашей программе буква «a» преобразуется в U + 61, которая сопоставляется с символом китайского символа, но «好» со значением U + 597D нет.

Вы можете продолжать использовать свой шрифт и искать позицию каждого персонажа, чтобы вы могли использовать правильный номер. Не используйте вместо «a» что-то вроде (char) 0x61, поэтому он немного запутан. Или…

Просто получите действительный шрифт unicode, который содержит символ «好» в U + 597D.

Загрузчик freetype в libGDX фактически создает BitmapFont . Для этого ему понадобится список символов. Список по умолчанию – только буквенно-цифровые. Для рендеринга unicode вам нужно будет заменить / добавить этот список с помощью символов Unicode, которые вам нужны.

Следующий код должен помочь (я использую 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); 

Примечание . Если вы используете менеджер активов, вам необходимо установить загрузчики, как в их примере:

 FileHandleResolver resolver = new InternalFileHandleResolver(); manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver)); manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver)); 

Я также нашел этот ответ .

Intereting Posts
Перезагрузка активности при ротации Android Android создает PDF-документ из веб-браузера с несколькими страницами TextView onClick не реагирует на одно нажатие Исключение входа Исключение ошибки SASL с использованием механизма DIGEST-MD5 asmack in android Взаимодействие Android Nexus One с Arduino + BlueSmirf Java.lang.RuntimeException: выполнение остановки активности, которая не возобновляется в android Пользовательский ViewPager, позволяющий дочернему элементу управления GoogleMap прокручивать по горизонтали Eclipse по-прежнему запускает проект по старому имени IAds для Android? Невозможно выбрать другую учетную запись Google Analytics при создании файла конфигурации для Google Analytics Мне нужно иметь собственный диалог в настройках Видео кодируется из последовательности изображений из java android Какова наилучшая первичная ключевая стратегия для онлайн-офлайнового многопользовательского мобильного приложения с базами данных SQLite и Azure SQL в качестве центрального магазина? Могу ли я использовать layout_weight для размещения RelativeLayout? Android – Заполнить путь цветом