Нарисуйте BitmapFont повернутый в libgdx - PullRequest
6 голосов
/ 14 декабря 2011

Я не могу понять, как правильно повернуть растровый шрифт. Я думаю, что вы модифицируете матрицу преобразования SpriteBatch. Однако при попытке повернуть текст вокруг какой-то точки, и я не знаю, как повернуть его относительно самого текста.

Ответы [ 4 ]

5 голосов
/ 28 марта 2013

Вы можете создать глиф в спрайте. Таким образом, вы можете манипулировать своим текстом как спрайтом.

Пример кода:

Обратите внимание, это вернет Sprite одного символа. (Например, символ '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;
}   
4 голосов
/ 10 марта 2012

Вы можете попробовать следующий код:

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();
1 голос
/ 30 января 2018

Первый ответ от Lunatikul не сработал в моем 2D-случае.Это сокращает мой текст только до половины буквы.Я был успешным со следующим:

batch.begin();
batch.setTransformMatrix(new Matrix4().setToRotation(0,0,1,<insert angle here>));
font.draw(batch, "Hallo Welt", 100, 100);
batch.end();
0 голосов
/ 03 марта 2016

Я бы просто добавил ... Полагаю, у вас есть базовое изображение шрифта внутри какого-то атласа ... поэтому вам нужно добавить оригиналы 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);
...