web-dev-qa-db-fra.com

Polices TrueType dans libGDX

Est-ce que quelqu'un sait comment utiliser une police TTF dans libGDX? J'ai regardé autour de moi et j'ai vu des choses sur StbTrueTypeFont mais cela ne semble pas être dans la dernière version.

EDIT: J'ai trouvé la police StbTrueType, le fichier jar est situé dans le répertoire des extensions. Je l'ai ajouté à mon projet. Maintenant, j'ai juste besoin de comprendre comment l'utiliser. Des exemples?

36
Alex_Hyzer_Kenoyer

Oui, vous devrez certainement ajouter les bocaux gdx-stb-truetype À votre projet comme vous l'avez indiqué dans votre édition. Voici comment vous allez l'utiliser, assez simple ...

Vous devez d'abord déclarer votre BitmapFont et les caractères que vous utiliserez ...

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

Ensuite, vous devez créer la police ...

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);

Vous pouvez jouer avec les arguments que vous passez à createBitmapFont() et vous verrez ce qu'ils font.

Ensuite, pour rendre la police, vous le feriez comme vous le faites normalement ...

batch.begin();
font.draw(font, "This is some text", 10, 10);
batch.end();
40
DRiFTy

Utilisez l'extension gdx-freetype:

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

"Pour utiliser gdx-freetype, récupérez les derniers nightlies, lien gdx-freetype.jar et gdx-freetype-natives.jar à votre projet de bureau, liez gdx-freetype.jar dans votre Android, et copiez le armeabi/libgdx-freetype.so et armeabi-v7a/libgdx-freetype.so fichiers vers votre Android Android libs/ dossier, comme avec le libgdx.so des dossiers."

Source: http://www.badlogicgames.com/wordpress/?p=23

27
TalkLittle

A fait beaucoup de recherches et a trouvé cette méthode de travail:

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

Utilisez ceci si vous avez échoué aux réponses ci-dessus, Wiki LibGDX Freetype pour référence.

7
Kévin Berthommier

Cela fonctionne sur un téléphone clone S4: Pinewood est une police téléchargée, dans le dossier des ressources. Voir la structure des dossiers ci-dessous.

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

3
user529543

vous devez utiliser la bibliothèque FreeTypeFont. github

1.Comme le dit la page github, pour les projets utilisant gradle, ajoutez ces dépendances:

Dépendance de base:

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

Dépendance du bureau:

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

Dépendance 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"

pour plus de détails et de plateformes, voir this page

si vous n'utilisez pas gradle voir this

2.Après la bibliothèque ajoutée à votre projet, vous pouvez l'utiliser comme ceci:

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!

et mettez myfont.ttf dans le dossier des ressources principales

0
codegames