2013-12-15 10 views
6

Ho riscontrato un problema durante il tentativo di inserire un sistema di testo/dialogo nel mio progetto di gioco. Quando creo un font e chiamo il metodo di disegno su di esso passando la fotocamera spriteBatch aggiornata, ogni pixel del font ha la stessa dimensione di uno sprite.LibGDX sprite batch font rendering di scala errato

ottengo il seguente render:

font draw scale issue

Che cosa si può vedere dalla foto è la parte superiore della "h" di "ciao" con ogni pixel di grandi dimensioni. La stessa telecamera viene utilizzata per rendere le tessere/sprite.

L'effetto che voglio ottenere è simile a questo:

Elliot quest example

Ecco il codice:

// 15 * 12 tile size 
    camera = new OrthographicCamera(Const.VIEWPORT_WIDTH, Const.VIEWPORT_HEIGHT); 
    BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonts/myfont.fnt")); 

    // .... 

    // p => player position 
    camera.position.x = p.getX(); 
    camera.position.y = p.getY(); 
    camera.update(); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    font.draw(batch, "hello", p.getX(), p.getY()); 
    batch.end(); 

Ho provato con font.setScale() senza successo.

Qualcuno sa come ottenere ciò?

risposta

6

Creare una fotocamera con una vista più grande (ad esempio pixel perfetto del dispositivo di test). E usalo per rendere il tuo font. Inoltre, non creare un nuovo carattere ogni rendering, crearlo all'inizio e utilizzarlo.

Edit:

per calcolare la posizione si dovrebbe disegnare il testo, sarebbe come questo. Supponiamo che la tua fotocamera del mondo sia chiamata "cam" e che la tua videocamera sia chiamata "guicam". E un GameObject chiamato "oggetto".

ratew = guicam.viewportWidth/cam.viewportWidth; //<--- you should calculate these 2 only once. 
rateh = guicam.viewportHeight/cam.viewportHeight; 

x = guicam.position.x-(cam.position.x-object.position.x)*ratew; 
y = guicam.position.y-(cam.position.y-object.position.y)*rateh; 
font.draw(batch, "stuff", x, y); 
+0

grazie per la sua risposta, ma voglio coordinare il testo per essere lo stesso sprite rendere fotocamera. Devo aggiornare manualmente il coord? –

+2

Sì, devi calcolarlo manualmente, ho modificato la mia risposta per mostrarti come. – Lestat

+0

Funziona perfettamente, grazie mille per questa bella risposta. –

-1

Si può provare Texture.TextureFilter.Linear per min & filtri max.

Libgdx AssetManager font carichi bitmap con i filtri desiderati:

BitmapFontLoader.BitmapFontParameter param = new BitmapFontLoader.BitmapFontParameter(); 
param.maxFilter = Texture.TextureFilter.Linear; 
param.minFilter = Texture.TextureFilter.Linear; 
assetManager.load(fileName, BitmapFont.class, param);