2012-10-15 4 views
12

Je parie sérieusement que j'ai fait quelque chose de stupide et que je n'arrive pas à le remarquer.Comment dessiner un BitmapFont dans LibGDX?

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 l'outil de modèle qu'ils fournissent GDX-setup-ui.jar Comme vous pouvez le voir dans le code, je ne l'ai pas pris la peine de se débarrasser des codes par défaut (Juste un peu codes de dessin simples pour afficher le logo LibGDX).

Ainsi, le projet généré proprement, je suivais ce guide ici http://code.google.com/p/libgdx-users/wiki/addingText2D

et d'arriver enfin avec le code fourni ci-dessus.

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

Ai-je manqué quelque chose?

FYI: Les polices sont très bien, je les ai déposées dans un autre jeu et cela fonctionne.

Répondre

8

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

Tout ce que je fais est

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

et render

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

Vous pouvez lire quelque chose de plus à ce sujet sur mon blog: http://algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/

1

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

2

Le principal problème avec votre code est que vous avez créé la caméra avec
ViewportWidth = 1 &
viewportHeight = largeur/hauteur

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

modifiez l'initialisation de la caméra à

camera = new OrthographicCamera(width, height); 

.... ou modifier l'instruction de la police de tirage au

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

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

définir la taille de la police 150, il va créer un.fichier FNT et un fichier .png

copie deux fichiers dans votre dossier assests

déclare la police

de police BitmapFont;

nw créer un méthode

police = new BitmapFont (Gdx.files.internal ("données/100.fnt"), false); // 100 est le nom de police que vous pouvez donner à votre police un nom

dans le rendu

police.setscale (.2f);

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

cela fonctionnera sans à-coup

5

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

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

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

Plus d'info here

Le rendu est fait de la même manière, comme expliqué par WATIS.

+0

Je ne peux pas utiliser generator.generateFont (int); parce que ça n'existe pas. Vous pouvez seulement passer un FreeTypeFontParameter – Eames

+0

Il y a un tutoriel sur l'utilisation de FreeTypeFontGenerator ici> https://libgdx.info/basic-label/ – Julien

Questions connexes