LibGDX Tutoriais - Escrevendo texto / Criando BitmapFonts
Autor: João Neto | Publicado: 2012-09-20T12:47:00-03:00

Salve pessoas!

Para quem ainda não conhece o início desses tutoriais pode acessá-los aqui(1) e aqui(2).


Continuo eu aqui tentando ensinar sobre LibGDX. Vou falar sobre como escrever texto. Eu sei, parece bobagem, coisa simples, mas acaba não sendo, por um motivo bem simples: o OpenGL não interpreta diretamente fontes instaladas no OS para escrever texto. Para isso, é necessário haver um intermediário, que é o caso do LibGDX, onde usaremos o BitmapFont.

Usando os projetos criados nos tutoriais anteriores, agora vamos escrever um pouco de texto. Abra o projeto LibgdxCore, o arquivo GameRoot, e acrescente essa declaração:



private BitmapFont currentFont;



No método create(), adicione a Instancia do objeto:



currentFont = new BitmapFont();



No método dispose(), adicione a descarga do objeto:



currentFont.dispose();



E por fim, vamos escrever algum texto. Como eu detesto Hello World, que tal desenharmos os Frames for segundo da aplicação? É claro, o LibGDX facilita a vida e disponibiliza esse dado num método estático, bastando chamá-lo, o&nbsp;Gdx.graphics.getFramesPerSecond(). No método render(), após a chamada begin() do spriteBatch, adicione a chamada para desenhar. Note que agora o SpriteBatch é passado como parametro para o Bitmapfont:



currentFont.draw(currentBatch, "FPS:" + Gdx.graphics.getFramesPerSecond(), 20, 20);



Até este ponto, sua classe deve estar assim:





E ao executar:





Você vai notar que vai ficar borrado e estranho. Bem, para processos de desenho que possuem variação, como esse caso, precisamos limpar o buffer. Para isso, adicione no método render(), como primeira linha, esta aqui:



Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);



Mas o que essa linha faz? ela informa ao openGL que ele deve limpar o buffer da GPU, usando a cor padrão, que pode ser alterada a qualquer hora pelo método abaixo:



Gdx.gl.glClearColor(r, g, b, 1.0f);



R, G e B são os valores que você deve aplicar, de 0.0 a 1.0, para formar a cor desejada. Para exemplificar, coloque este código no método create():



Gdx.gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);



Ao executar, o resultado será esse:







Agora que brincamos um pouco com as cores de fundo, vamos voltar a falar das fontes. Quando um objeto&nbsp;Bitmapfont é criado sem parametros, internamente o LibGDX cria uma instancia de uma fonte default que ele possui, do tipo Arial de 15 pontos. Você pode criar suas próprias fontes para usar em seus jogos, usando uma ferramenta que a equipe LibGDX fornece, o Hiero. Para fazer o download do Hiero clique aqui. Não vou ficar aqui falando de como funciona, o que tem de mais e tal, basta ler no blog da BadLogic.

Você escolhe a fonte, o tamanho, coloca efeitos, mais um monte de coisas. Crie uma fonte do tipo Verdana de 32, salve o arquivo como verdana-32.fnt. Ao gravar, ele vai criar dois arquivos, o .fnt e um .png. Copie os dois para o diretório assets do projeto de Android:







Agora, na instancia do objeto&nbsp;Bitmapfont, acrescentaremos os parametros necessários para a leitura do arquivo. Para isso, você deve usar o gerador de FileHandle do LibGDX, como abaixo:



currentFont = new BitmapFont(Gdx.files.internal("verdana-32.fnt"), false);



Também é necessário fazer um ajuste no desenho da fonte. Ah, a fonte o LibGDX usa como referencia o topo e não o fundo, ou seja, sempre na posição Y é necessário colocar no mínimo o tamanho da fonte para que ela apareça na tela:



currentFont.draw(currentBatch, "FPS:" + Gdx.graphics.getFramesPerSecond(), 20, 40);



E por fim:





E é isso. Para facilitar a vida estou disponibilizando o arquivo GameRoot.java, para que você compare com o seu e ajuste o que for necessário.

Tem muita, mas muita coisa que o LibGDX facilita, e eu espero conseguir falar de pelo menos um décimo. No próximo tutorial pretendo falar de interação do usuário, toques, sensores, e mais algumas coisas.


E como eu digo sempre : Be Brave, Be Bold, Create !!
Até a próxima !