2012-09-17 2 views
26

Ho avuto un sacco di problemi a cercare su Google come disegnare un semplice testo 2D con Libgdx. Ecco il codice che ho messo insieme finora:Come posso disegnare il testo usando Libgdx/Java?

SpriteBatch spriteBatch; 
BitmapFont font; 
CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 

Il codice non disegnare la stringa Ciao Mondo, tuttavia, si scombina tutti i miei altri disegni. Sono lì, brutalmente mutilati, e si muovono e tutto il resto. Ho provato Gdx.gl11.glPushMatrix() e Gdx.gl11.glPopMatrix() in quasi tutti i sottogruppi di istruzioni.

Ho ristretto i disegni mutilati fino alla chiamata font.draw(), se è stata tolta, tutto funziona correttamente (ma ovviamente non c'è testo allora).

risposta

12

Quando ho creato il tipo di carattere bitmap è stato come questo:

font = new BitmapFont(Gdx.files.internal("Calibri.fnt"),Gdx.files.internal("Calibri.png"),false); 

provare questo scaricando alcuni file di font (durante il download di un font si prega di controllare se il file .fnt e .png è incluso per lo stesso)

+0

@Asgeir non dimenticare di accettare la risposta se lo hai trovato utile – alex

+4

Non fa differenza. Istanzandolo con 'new BitmapFont()' verrà utilizzato il carattere predefinito incorporato. –

+1

E BitmapFont da solo non esegue il rendering. BitmapFont è la configurazione per come esegue il rendering del testo. Il batch disegna il testo usando BitmapFont e una stringa (il testo da disegnare) – Zoe

2

tenta di chiamare batch.begin multipla() e batch.end():

CharSequence str = "Hello World!"; 
spriteBatch = new SpriteBatch(); 
font = new BitmapFont(); 

spriteBatch.begin(); 
font.draw(spriteBatch, str, 10, 10); 
spriteBatch.end(); 
spriteBatch.begin(); 
//draw your other sprites here 
spriteBatch.draw(...); 
spriteBatch.end(); 

o semplicemente usare una diversa istanza di SpriteBatch

+0

Questo non funziona. –

2

Per creare un file .fnt, utilizzare hiero fornito dal sito Web di LibGDX.

Impostare la dimensione del carattere 150, verrà creato un file .fnt e un file .png. Copia entrambi i file nella cartella delle risorse.

Per dichiarare il font:

BitmapFont font; 

Per caricare il font: (A creare metodo)

font = new BitmapFont(Gdx.files.internal("data/rayanfont.fnt"), false); 
//rayanfont is the font name 

al rendering:

batch.begin(); 
font.setScale(.2f); 
font.draw(batch, "hello", x,y); 
batch.end(); 

Questo funziona senza intoppi.

+0

Non intendi 'setScale'? – Cilan

19

Non vedo molte ragioni per creare batch separati per il disegno del testo. Utilizzando gdxVersion = '1.4.1' (costruita con Gradle in Android Studio) che il codice disegna il testo con successo:

BitmapFont font = new BitmapFont(); //or use alex answer to use custom font 

public void render(float dt) 
    { 
    batch.setProjectionMatrix(camera.combined); //or your matrix to draw GAME WORLD, not UI 

    batch.begin(); 

    //draw background, objects, etc. 
    for(View view: views) 
    { 
     view.draw(batch, dt); 
    } 

    font.draw(batch, "Hello World!", 10, 10); 

    batch.end(); 
    } 

nota, che qui si disegna nel gioco coordinate mondo, quindi se il tuo personaggio si muove (in platform, per esempio), anche il testo si muoverà. Se vuoi vedere del testo, che sarà fissato sullo schermo, qualcosa come Label/TextField o come viene chiamato in diversi framework UI, allora ti consiglio di usare Stage (e TextArea per il testo), vedi per esempio su come usare Stage qui: http://www.toxsickproductions.com/libgdx/libgdx-basics-create-a-simple-menu/