2011-12-14 27 views
6

Tôi dường như không thể tìm ra cách xoay một phông chữ Bitmap một cách chính xác. Tôi nghĩ rằng bạn sửa đổi ma trận chuyển đổi của SpriteBatch. Tuy nhiên, cố gắng xoay mà xoay văn bản xung quanh một số điểm, và tôi không biết làm thế nào để xoay nó liên quan đến bản thân văn bản.Vẽ một BitmapFont được xoay trong libgdx

Trả lời

4

bạn có thể thử đoạn mã sau:

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

Bạn nên xây dựng trên những gì các vector có nghĩa là khi thực hiện setToRotation – chairbender

+1

không làm việc cho tôi, những gì tôi thiếu ở đây? –

5

Bạn có thể tạo ra một hình tượng thành một sprite. Bằng cách đó, bạn có thể thao tác văn bản của mình dưới dạng hình ảnh.

Mã mẫu:

Lưu ý, điều này sẽ trả lại một Sprite của một hình tượng đơn. (Ví dụ: char 'A' được chuyển thành một 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

Nó không tôn trọng chiều rộng và chiều cao của ký tự, ví dụ: nếu bạn lấy char "", nó không hiển thị ở đầu, nếu bạn đặt ch là dấu cách "", nó không tôn trọng chiều rộng không gian . – LeSam

0

Tôi chỉ muốn nói thêm .. Tôi giả sử bạn có hình ảnh cơ bản font chữ bên trong một số atlas .. vì vậy bạn cần phải thêm gốc TextureRegion sot gliph src vì nó chỉ liên quan đến vùng Kết cấu đã cho nên

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

Câu trả lời đầu tiên từ Lunatikul không hoạt động trong trường hợp 2D của tôi. Nó cắt văn bản của tôi thành chỉ một nửa lá thư. Tôi đã thành công với những điều sau:

batch.begin(); 
batch.setTransformMatrix(new Matrix4().setToRotation(0,0,1,<insert angle here>)); 
font.draw(batch, "Hallo Welt", 100, 100); 
batch.end(); 
Các vấn đề liên quan