在libgdx中绘制一个旋转的BitmapFont

7

我似乎无法正确地旋转位图字体。我认为你需要修改SpriteBatch的变换矩阵。然而,尝试旋转它会使文本围绕某个点旋转,我不知道如何相对于文本本身进行旋转。

4个回答

5

您可以将字形创建成一个精灵。这样,您就可以将文本作为精灵进行操作。

示例代码:

请注意,这将返回一个单个字形的精灵。(例如,字符'A'被转换为精灵。)

/** 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;
}   

它不尊重字符的宽度和高度,例如如果你取一个“'”字符,它不会在顶部显示它,如果你将ch设置为空格“”,它不会尊重空格的宽度。 - LeSam

4

您可以尝试以下代码:

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
在进行setToRotation时,您应该详细说明向量的含义。 - chairbender

1

来自Lunatikul的第一个答案在我的二维情况下没有起作用。它只剪切了我的文本一半的字母。我成功地使用了以下方法:

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

0

我只是想添加一点..我猜你在某个图集里面有字体图片..所以你需要添加TextureRegion原件,将gliph源作为它只是相对于给定的TextureRegion。

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接