Шрифты TrueType в libGDX
Кто-нибудь знает, как я могу использовать шрифт TTF в libGDX? Я посмотрел вокруг и увидел вещи о StbTrueTypeFont, но, похоже, он не находится в последней версии.
EDIT: я нашел материал шрифта StbTrueType, файл jar находится в каталоге расширений. Я добавил его в свой проект. Теперь мне просто нужно выяснить, как его использовать. Любые примеры?
Ответы
Ответ 1
Да, вам определенно нужно будет добавить баночки 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(batch, "This is some text", 10, 10);
batch.end();
Ответ 2
Используйте расширение 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
на свой Android проекты libs/
, как и файлы libgdx.so
.
Источник: http://www.badlogicgames.com/wordpress/?p=2300
Ответ 3
Много исследовал и нашел этот рабочий метод:
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 для справки.
Ответ 4
Это работает с кодовым телефоном 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]()
Ответ 5
Вы должны использовать библиотеку 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 в папку основных ресурсов