web-dev-qa-db-fra.com

Comment dessiner un BitmapFont dans LibGDX?

Je parie sérieusement que j'ai fait quelque chose de stupide et que je n'arrive pas à le remarquer.

package com.me.mygdxgame;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;

public class Locked implements ApplicationListener
{
    private OrthographicCamera camera;
    private SpriteBatch batch;
    private Texture texture;
    private Sprite sprite;
    private BitmapFont font;
    private CharSequence str = "Hello World!";
    private float width;
    private float height;

    @Override
    public void create()
    {
        width = Gdx.graphics.getWidth();
        height = Gdx.graphics.getHeight();

        camera = new OrthographicCamera(1, height / width);
        batch = new SpriteBatch();

        texture = new Texture(Gdx.files.internal("data/libgdx.png"));
        texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

        TextureRegion region = new TextureRegion(texture, 0, 0, 512, 275);

        Sprite = new Sprite(region);
        Sprite.setSize(0.9f, 0.9f * Sprite.getHeight() / Sprite.getWidth());
        Sprite.setOrigin(Sprite.getWidth() / 2, Sprite.getHeight() / 2);
        Sprite.setPosition(-Sprite.getWidth() / 2, -Sprite.getHeight() / 2);

        font = new BitmapFont(Gdx.files.internal("data/digib.fnt"),
                Gdx.files.internal("data/digib.png"), false);
    }

    @Override
    public void dispose()
    {
        batch.dispose();
        texture.dispose();
    }

    @Override
    public void render()
    {
        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        font.setColor(0.0f, 0.0f, 0.0f, 1.0f);

        //Sprite.draw(batch);
        font.draw(batch, str, width*0.5f, height*0.5f);
        batch.end();
    }

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

    @Override
    public void pause()
    {
    }

    @Override
    public void resume()
    {
    }
}

Le projet a été généré avec le gabarit fourni. gdx-setup-ui.jar Comme vous pouvez le constater dans le code, je ne me suis pas donné la peine de supprimer les codes par défaut rendre le logo LibGDX).

Donc, avec le projet généré proprement, j'ai suivi ce guide ici http://code.google.com/p/libgdx-users/wiki/addingText2D

et enfin arriver avec le code fourni ci-dessus.

Le problème est, pourquoi le texte!! # # $ Ing ne sera-t-il pas affiché !? J'ai changé la position tellement de fois et toujours pas de chance: \

Ai-je manqué quelque chose?

FYI: Les polices vont bien, je les ai insérées dans un autre jeu et ça marche.

12
ains

Essayez de changer la matrice de projection comme ceci:

Matrix4 normalProjection = new Matrix4().setToOrtho2D(0, 0, Gdx.graphics.getWidth(),  Gdx.graphics.getHeight());

batch.setProjectionMatrix(normalProjection);
8
watis

Tout ce que je fais c'est 

    spriteBatch = new SpriteBatch();
 font = new BitmapFont(Gdx.files.internal("data/nameOfFont.fnt"),
         Gdx.files.internal("data/nameOfFont.png"), false);

et dans la méthode de rendu

spriteBatch.begin();
 font.setColor(1.0f, 1.0f, 1.0f, 1.0f);
 font.draw(spriteBatch, "some string", 25, 160);
 spriteBatch.end();

Vous pouvez en lire plus sur mon blog: http://algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/

8
AlgoRhymes

Personnellement, je ne suis pas un grand fan de la conversion de toutes les polices au format .fnt. Si vous avez besoin de tailles différentes pour une police donnée, vous devez passer beaucoup de temps (et d’espace dans l’application) pour effectuer toutes les conversions.

Vous pouvez simplement utiliser l'extension FreeType et charger directement à partir d'un fichier .ttf

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

Plus d'infos ici

Le rendu se fait de la même manière que l'explique watis.

5
sheitan

créer un fichier .fnt à l'aide de hiero fourni par le site Web libgdx

définir la taille de la police 150, il créera un fichier .fnt et un fichier png

copier les deux fichiers dans votre dossier assests

maintenant déclarer la police

Police BitmapFont;

nw dans la méthode create

font = new BitmapFont (Gdx.files.internal ("data/100.fnt"), false); // 100 est le nom de la police que vous pouvez attribuer à votre police.

en rendre

font.setscale (.2f);

font.draw (batch, "tout ce que vous voulez écrire", x, y);

cela fonctionnera bien

3
sandeep kundliya

Le principal problème de votre code est que vous avez créé un appareil photo avec
viewportWidth = 1 &
viewportHeight = largeur/hauteur

et vous dessinez la police à la largeur * 0.5f et la hauteur * 0.5f qui sont hors de portée de la caméra

Soit changer l’initialisation de la caméra en

camera = new OrthographicCamera(width, height);

.... ou remplacez l'instruction de police de caractères par

font.setScale(1,height/width);
font.draw(batch, str, 0.5f, height/width*0.5f);
2
Vikalp Jain

Avez-vous essayé de donner votre position manuellement comme ceci? J'espère que cela fonctionnera Batch.setProjectionMatrix (camera.combined); Batch.enableBlending (); Batch.begin ();
font.draw (batch, yourString, 100,100);
batch.end ();

1
Nishant Anindya