Шрифты TrueType в libGDX - PullRequest
       41

Шрифты TrueType в libGDX

36 голосов
/ 28 февраля 2012

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

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

Ответы [ 5 ]

40 голосов
/ 28 февраля 2012

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

Сначала вам нужно объявить свой 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(font, "This is some text", 10, 10);
batch.end();
27 голосов
/ 28 декабря 2012

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

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

"Чтобы использовать gdx-freetype, возьмите последние ночные ночи, свяжите 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

7 голосов
/ 07 сентября 2014

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

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 для справки.

3 голосов
/ 05 ноября 2013

Это работает на телефоне-клоне 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() {
    }

}

enter image description here

0 голосов
/ 05 июля 2019

вы должны использовать библиотеку 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, см. this

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 в папке основных ресурсов

...