Libgdx字体切

时间:2016-06-19 16:14:17

标签: libgdx scene2d bitmap-fonts

我有一个libgdx BitMapFont的问题,我在一个scene2d表中显示标签,但字体在文本的某些部分被“剪切”(见下文)。

enter image description here

这是我的代码:

用于声明字体:

InfluxDB

用于声明表格:

font12 = new BitmapFont(Gdx.files.internal("fonts/text.fnt"));
font12.setUseIntegerPositions(false);
font12.getData().setScale(0.2f);

感谢您的帮助。

[编辑]

以下是我尝试使用freetype的代码,但这看起来并不顺利:

Table table = new Table();
table.top();        
table.setFillParent(true);
LabelStyle lblStyle = new LabelStyle();
lblStyle.font = font12;
scoreLabel =new Label("SCORE", lblStyle);
timeLabel = new Label("TIME", lblStyle);
levelLabel = new Label("LEVEL", lblStyle);

enter image description here

1 个答案:

答案 0 :(得分:1)

首先,你应该总是避免缩放字体,因为结果是像素化的,看起来非常糟糕。您可以使用FreeTypeFontGenerator将字体生成为程序中所需的正确大小:

https://github.com/libgdx/libgdx/wiki/Gdx-freetype

向表中添加组件时,表会设置其子组件的大小。基本上,当标签添加到表格时,表格将覆盖标签的大小。

要确保标签保持相同的大小,请在表格的单元格上设置大小,如下所示:

table.add(label).size(label.getWidth(), label.getHeight());

将标签添加到表格时,您也可以对标签应用不同的尺寸(例如,如果您希望标签周围有额外的空间):

table.add(label).size(500, 100);

修改

此代码适用于我,请尝试一下。

private Stage stage;

@Override
public void create () {     
    stage = new Stage();
    stage.setViewport(new ScreenViewport(stage.getViewport().getCamera()));

    Table table = new Table();
    table.setFillParent(true);
    stage.addActor(table);

    FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("internal/arialbd.ttf"));
    FreeTypeFontGenerator.FreeTypeFontParameter param = new FreeTypeFontGenerator.FreeTypeFontParameter();
    param.size = 18;
    param.borderColor = new Color(Color.BLACK);
    param.borderWidth = 1;
    BitmapFont font = gen.generateFont(param);
    gen.dispose();

    Label.LabelStyle style = new Label.LabelStyle();
    style.font = font;
    Label label = new Label("Hello World", style);

    table.add(label).size(label.getWidth(), label.getHeight());
}

@Override
public void render() {  
    Gdx.gl.glClearColor(0.6f, 0.8f, 0.8f, 1.0f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);   
    stage.act(Gdx.graphics.getDeltaTime());
    stage.draw();
}

@Override
public void resize(int width, int height) {
    stage.getViewport().update(width, height, true);
}

enter image description here