2011-12-14 50 views
6

Parece que no puedo entender cómo rotar correctamente una fuente de mapa de bits. Creo que modificas la matriz de transformación del SpriteBatch. Sin embargo, al tratar de rotar, el texto gira alrededor de cierto punto y no sé cómo rotarlo en relación con el texto en sí.Dibuje un BitmapFont girado en libgdx

Respuesta

4

se puede probar el siguiente código:

Matrix4 mx4Font = new Matrix4(); 
BitmapFont font; 
SpriteBatch spriteFont; 

font = new BitmapFont(Gdx.files.internal("data/font/agencyFB.fnt"), Gdx.files.internal("data/font/agencyFB.png"), true); //must be set true to be flipped 
mx4Font.setToRotation(new Vector3(200, 200, 0), 180); 
spriteFont.setTransformMatrix(mx4Font); 
spriteFont.begin(); 
font.setColor(1.0f, 1.0f, 1.0f, 1.0f); 
font.draw(spriteFont, "The quick brown fox jumped over the lazy dog", 100, 110); 
spriteFont.end(); 
+3

Usted debe elaborar sobre lo que significa el vector cuando se hace setToRotation – chairbender

+1

no funcionó para mí, lo que me estoy perdiendo aquí? –

5

Se puede crear un glifo en un sprite. De esta manera, puede manipular su texto como un sprite.

código Ejemplo:

Nota, este devolverá un Sprite de un solo glifo. (Por ejemplo carbón 'A' se transforma en un sprite.)

/** Creates a sprite from a glyph. 
* 
* @param ch 
* @return Sprite 
*/ 
public Sprite getGlyphSprite (char ch) { 

    Glyph glyph = Globals.g.font.getData().getGlyph(ch); 
    Sprite s = new Sprite(Globals.g.font.getRegion().getTexture(), 
      glyph.srcX,glyph.srcY,glyph.width, glyph.height); 

    s.flip(false, true); 
    s.setOrigin(glyph.width/2, glyph.height/2); 

    return s; 
} 
+0

No respeta el ancho ni la altura del carácter, por ejemplo, si toma un carácter "'", no lo muestra en la parte superior, si establece ch como un espacio "", no respeta el ancho del espacio . – LeSam

0

me acaba de añadir .. supongo imagen de base de fuente que tiene dentro de algunos atlas .. por lo que necesita para agregar originales TextureRegion Sot gliph src ya que es solo relativo a esa región de texturas dada así que

BitmapFont font = ... 
BitmapFont.Glyph glyph = font.getData().getGlyph(ch); 
int srcX = glyph.srcX + font.getRegion().getRegionX(); 
int srcY = glyph.srcY+ font.getRegion().getRegionY(); 
Sprite s = new Sprite(font.getRegion().getTexture(), srcX,srcY,glyph.width, glyph.height); 
0

La primera respuesta de Lunatikul no funcionó en mi caso 2D. Corta mi texto a solo media letra. Estaba exitosa con lo siguiente:

batch.begin(); 
batch.setTransformMatrix(new Matrix4().setToRotation(0,0,1,<insert angle here>)); 
font.draw(batch, "Hallo Welt", 100, 100); 
batch.end();