2012-10-15 3 views
12

Sto seriamente scommettendo che ho fatto qualcosa di stupido e non riesco a notarlo.Come disegnare un BitmapFont in 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() 
    { 
    } 
} 

Il progetto è stato generato con la mascherina che forniscono GDX-setup-ui.jar Come si può vedere nel codice, non mi sono preoccupato di sbarazzarsi dei codici predefiniti (Solo un po ' codici di estrazione semplici per rendere il logo LibGDX).

Così, con il progetto in modo pulito generato, ho seguito questa guida qui http://code.google.com/p/libgdx-users/wiki/addingText2D

e, infine, arrivano con il codice fornito in precedenza.

Il problema è, perché non verrà visualizzato il testo! @ # $ !? Ho cambiato la posizione tante volte e ancora senza fortuna: \

Mi sono perso qualcosa?

FYI: I caratteri sono a posto, li ho rilasciati in un altro gioco e funziona.

risposta

8

tenta di modificare matrice di proiezione come questa:

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

batch.setProjectionMatrix(normalProjection); 
7

Tutto ciò che faccio è

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

e nel rendere il metodo

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

Potete leggere qualcosa di più su di esso sul mio blog: http://algorhymes.wordpress.com/2012/11/17/javalibgdx-fonts/

1

Hai provato a dare la posizione manualmente in questo modo. Spero che questo funzionerà batch.setProjectionMatrix (camera.combined); batch.enableBlending(); batch.begin();
font.draw (batch, yourString, 100,100);
batch.end();

2

Il problema principale con il codice è che si è creato con la fotocamera
ViewportWidth = 1 &
ViewportHeight = larghezza/altezza

e si sta disegnando carattere a larghezza * 0.5f & altezza * 0.5f che è da portata dalla telecamera

O modificare l'inizializzazione fotocamera per

camera = new OrthographicCamera(width, height); 

.... o modificare l'istruzione draw font per

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

creare un file utilizzando .fnt hiero che è fornito dal sito libgdx

impostare la dimensione del carattere 150, si creerà una.file di fnt e un file png

copia sia del file nella cartella assests

ora dichiarare il tipo di carattere

carattere

BitmapFont;

nw a creare metodo

font = new BitmapFont (Gdx.files.internal ("Dati/100.fnt"), false); // 100 è il nome del font che si può dare il vostro font qualsiasi nome

in rendering

font.setscale (.2f);

font.draw (batch, "qualunque cosa si voglia scrivere", x, y);

questo funzionerà senza intoppi

5

Personalmente non sono un grande fan di convertire tutti i font per .fnt formato. Se hai bisogno di dimensioni diverse per un determinato tipo di carattere, devi dedicare molto tempo (e spazio per le app) per realizzare tutte le conversioni.

Si può semplicemente utilizzare l'estensione FreeType e caricare direttamente da un .ttf

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

Maggiori informazioni here

rendering è fatto nello stesso modo come spiegato da watis.

+0

Non riesco a utilizzare generator.generateFont (int); perché non esiste Puoi passare solo in un FreeTypeFontParameter – Eames

+0

Esiste un tutorial sull'utilizzo di FreeTypeFontGenerator qui> https://libgdx.info/basic-label/ – Julien