Шрифты TrueType в libGDX

Кто-нибудь знает, как я могу использовать шрифт TTF в libGDX? Я осмотрелся и увидел кое-что о StbTrueTypeFont, но, похоже, его нет в последней версии.

РЕДАКТИРОВАТЬ: я нашел материал шрифта StbTrueType, файл jar находится в каталоге расширений. Я добавил его в свой проект. Теперь мне просто нужно понять, как его использовать. Есть примеры?


person Alex_Hyzer_Kenoyer    schedule 28.02.2012    source источник
comment
где я могу получить этот файл библиотеки? я смотрел везде. единственные места, которые я нашел (которые не работали): code.google.com/p/libgdx/source/browse/trunk/extensions/ code.google.com/ p/libgdx/source/browse/trunk/extensions/   -  person android developer    schedule 24.03.2012
comment
Перейдите сюда: libgdx.badlogicgames.com/nightlies и загрузите libgdx-nightly-latest.zip, который вы найдет банки в каталоге расширений.   -  person Alex_Hyzer_Kenoyer    schedule 27.03.2012
comment
какие банки мне нужно использовать? Я пытался добавить gdx-stb-truetype.jar, но он продолжает выдавать ошибки и выдает мне исключения, например javax.media.opengl.GLException: java.lang.NoClass DefFoundError: com/badlogic/gdx/utils/SharedLibraryLoader. ..   -  person android developer    schedule 28.03.2012
comment
Вам нужны gdx-stb-truetype-natives.jar и gdx-stb-truetype.jar. Добавьте их в свой основной проект и обязательно добавьте их в путь сборки.   -  person Alex_Hyzer_Kenoyer    schedule 28.03.2012
comment
все еще есть та же ошибка. я даже пытался использовать другие новейшие библиотеки, которые нужны настольному проекту, но это не сработало (без ошибок, но я не вижу текста и некоторых других вещей): gdx-backend-jogl-natives.jar gdx -backend-jogl.jar gdx-natives.jar gdx-sources.jar gdx-stb-truetype-natives.jar gdx-stb-truetype.jar gdx.jar   -  person android developer    schedule 30.03.2012


Ответы (5)


Да, вам обязательно нужно добавить gdx-stb-truetype jar в свой проект, как вы указали в своем редактировании. Вот как вы будете его использовать, довольно просто...

Сначала вам нужно объявить свой BitmapFont и символы, которые вы будете использовать...

BitmapFont font;
public static final String FONT_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789][_!$%#@|\\/?-+=()*&.;,{}\"´`'<>";

Затем вам нужно создать шрифт...

font = TrueTypeFontFactory.createBitmapFont(Gdx.files.internal("font.ttf"), FONT_CHARACTERS, 12.5f, 7.5f, 1.0f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
font.setColor(1f, 0f, 0f, 1f);

Вы можете поиграть с аргументами, которые вы передаете createBitmapFont(), и вы увидите, что они делают.

Затем, чтобы отобразить шрифт, вы должны сделать это, как обычно...

batch.begin();
font.draw(batch, "This is some text", 10, 10);
batch.end();
person DRiFTy    schedule 28.02.2012
comment
Как я могу использовать этот шрифт с элементами пользовательского интерфейса, такими как com.badlogic.gdx.scenes.scene2d.ui.Label? Или это невозможно? - person uni; 19.06.2012
comment
@uni Как и в случае с любым BitmapFont, вы можете применить к Label, передав LabelStyle в конструкторе Label. В LabelStyle можно указать шрифт. libgdx.badlogicgames.com/ nightlies/docs/api/com/badlogic/gdx/ - person TalkLittle; 28.12.2012

Используйте расширение gdx-freetype:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
BitmapFont font15 = generator.generateData(15);
BitmapFont font22 = generator.generateData(22);
generator.dispose();

«Чтобы использовать gdx-freetype, скачайте последние nightlies, свяжите gdx-freetype.jar и gdx-freetype-natives.jar с вашим проектом для рабочего стола, свяжите gdx-freetype.jar с вашим проектом Android и скопируйте файлы armeabi/libgdx-freetype.so и armeabi-v7a/libgdx-freetype.so в папку libs/ вашего проекта Android, как и файлы libgdx.so».

Источник: http://www.badlogicgames.com/wordpress/?p=2300

person TalkLittle    schedule 27.12.2012
comment
Можно ли установить цвет BitmapFont, сгенерированный таким образом? Я не мог использовать на нем .setColor(rgb). - person kelorek; 06.05.2013
comment
@kelorek Пробовал setColor(r, g, b, a)? libgdx.l33tlabs.org/docs/api/ com/badlogic/gdx/graphics/g2d/ - person TalkLittle; 07.05.2013
comment
Я не рекомендую его использовать, так как он неуправляемый, тогда при возобновлении игры весь текст, нарисованный этим шрифтом на лету, будет белым. - person Ashraf Sayied-Ahmad; 25.08.2013
comment
Просто чтобы внести ясность, эти ночные игры можно скачать здесь: libgdx.badlogicgames.com /nightlies/dist/extensions/gdx-freetype - person Richard; 27.08.2013

Много исследовал и нашел этот рабочий метод:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("myfont.ttf"));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.size = 12; // font size
BitmapFont font12 = generator.generateFont(parameter);
generator.dispose(); // avoid memory leaks, important

Используйте это, если вы не смогли ответить на приведенные выше ответы, libGDX Freetype Wiki для справки.

person Kévin Berthommier    schedule 07.09.2014

Это работает на телефоне-клоне S4: Pinewood — это загруженный шрифт в папке с ресурсами. См. структуру папок ниже.

import android.util.Log;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;

public class Game implements ApplicationListener {
    private SpriteBatch mSpriteBatch;
    private Texture textureBackground;
    private BitmapFont mBitmapFont;

    public void create() {

        Gdx.graphics.setContinuousRendering(false);
        Gdx.graphics.requestRendering();

        mSpriteBatch = new SpriteBatch();

        Texture.setEnforcePotImages(false);
        textureBackground = new Texture(Gdx.files.internal("background.jpg"));

        FileHandle fontFile = Gdx.files.internal("Pinewood.ttf");
        FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

        mBitmapFont = generator.generateFont(150);
        generator.dispose();

        mBitmapFont.setColor(0.9f, 0.5f, 0.5f, 1); 
        Log.e("Game", "mBitmapFont.getScaleX() : "+mBitmapFont.getScaleX() + ", mBitmapFont.getScaleY() "+mBitmapFont.getScaleY());

    }

    public void render() {
        Log.e("Game", "render()");

        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // This cryptic line clears the screen.
        mSpriteBatch.begin();
        // Drawing goes here!
        mSpriteBatch.draw(textureBackground, 0, 0);
        mBitmapFont.draw(mSpriteBatch, "FPS:"+Gdx.graphics.getFramesPerSecond(), 110, 260);
        mSpriteBatch.end();     
    }

    public void resize(int width, int height) {
    }

    public void pause() {
    }

    public void resume() {
    }

    public void dispose() {
    }

}

введите здесь описание изображения

person Community    schedule 05.11.2013

вы должны использовать библиотеку FreeTypeFont. github

1. как говорится на странице github, для проектов, использующих gradle, добавьте следующие зависимости:

Основная зависимость:

compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"

Зависимость рабочего стола:

compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"

Зависимость от Android:

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-arm64-v8a"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86"
natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86_64"

более подробную информацию и платформы см. на этой странице.

если вы не используете gradle, см. это

2.после добавления библиотеки в ваш проект вы можете использовать ее следующим образом:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("myfont.ttf"));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.size = 12;
BitmapFont font12 = generator.generateFont(parameter); // font size 12 pixels
generator.dispose(); // don't forget to dispose to avoid memory leaks!

и поместите myfont.ttf в папку основных активов

person codegames    schedule 04.07.2019