2013-09-22 46 views
4

我想旋转libgdx中的BitmapFont。有关于这个问题的话题。 Draw a BitmapFont rotated in libgdx但是,我尝试的第一个解决方案会削减我的文本,整个文本不会出现(对角线切割)。它也会将它旋转90度,当它说它应该是180度。我只是不明白。文字旋转libgdx

代码:

public void show() { 
    sr = new ShapeRenderer(); 
    w = Gdx.graphics.getWidth(); 
    h = Gdx.graphics.getHeight(); 
    textRotation = new Matrix4(); 
    textRotation.setToRotation(new Vector3(200,200, 0), 180); 

    rectThickness = h/120; 
    c1 = Color.WHITE; 
    c2 = Color.WHITE; 
    f = new BitmapFont(Gdx.files.internal("fonts/MyFont.fnt"), 
      Gdx.files.internal("data/MyFont.png"), true); 
    f.setScale(h/500); 
    sb = new SpriteBatch(); 
} 
private void renderPlayerScores() { //callend in render 
    sb.setTransformMatrix(textRotation); 
    f.setColor(players[0].getColor()); 
    sb.begin(); 
    f.draw(sb, "Player 1: "+ Integer.toString(scores[0]), 100, 110); 
    sb.end(); 
} 
+1

请显示一些代码,尤其是您设置和初始化矩阵的部分。 –

+0

U可以使用补间,但为此你必须让你自己的文本精灵访问器 –

+0

你能举个例子吗? – user2685747

回答

2

一种方式做,这是使用scene2d标签。他们很容易与你合作,如果你阅读Scene2D UILabels,你应该能够做你想做的。但是,有些人不喜欢使用Scene2D。下面的代码完成了你想要的功能,但是为了避免使用Scene2D,这是一项额外的工作。

public SpriteBatch spriteBatch; 
private int posX = 100; 
private int posY = 100; 
private float angle = 45; 
private String text = "Hello, World!"; 
private BitmapFont font; 
private Matrix4 oldTransformMatrix; 
Matrix4 mx4Font = new Matrix4(); 

@Override 
public void show() { 
    font = new BitmapFont(Gdx.files.internal("someFont.ttf")); 
    oldTransformMatrix = spriteBatch.getTransformMatrix().cpy(); 
    mx4Font.rotate(new Vector3(0, 0, 1), angle); 
    mx4Font.trn(posX, posY, 0); 
} 

@Override 
public void render() { 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    spriteBatch.setTransformMatrix(mx4Font); 
    spriteBatch.begin(); 
    font.draw(spriteBatch, text, 0, 0); 
    spriteBatch.end(); 
    spriteBatch.setTransformMatrix(oldTransformMatrix); 
} 

我希望这对你有些用处。