Libgdx 字体剪切
Libgdx font cut
我对 libgdx BitMapFont 有疑问,我在 scene2d table 内显示标签,但文本的某些部分的字体是 "cut"(见下文)。
这是我的代码:
用于声明字体:
font12 = new BitmapFont(Gdx.files.internal("fonts/text.fnt"));
font12.setUseIntegerPositions(false);
font12.getData().setScale(0.2f);
用于声明 table :
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);
感谢您的帮助。
[编辑]
这是我尝试使用 freetype 的代码,但这看起来并不流畅:
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/OpenSans-Regular.ttf"));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.size = 18;
parameter.color = Color.BLACK;
generator.scaleForPixelHeight(18);
parameter.minFilter = Texture.TextureFilter.Linear;
parameter.magFilter = Texture.TextureFilter.Linear;
parameter.mono = false;
parameter.gamma = 2f;
font12 = generator.generateFont(parameter); // font size 12 pixels
font12.setUseIntegerPositions(false);
font12.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
generator.dispose(); // don't forget to dispose to avoid memory leaks!
首先,您应该始终避免缩放字体,因为结果像素化并且看起来非常糟糕。您可以使用 FreeTypeFontGenerator 生成程序中所需的正确大小的字体:
https://github.com/libgdx/libgdx/wiki/Gdx-freetype
将组件添加到 table 时,table 会设置其子组件的大小。本质上,当标签添加到 table.
时,table 将覆盖标签的大小
为确保标签保持相同大小,请像这样设置包含标签的 table 单元格的大小:
table.add(label).size(label.getWidth(), label.getHeight());
您还可以在将标签添加到 table 时对标签应用不同的尺寸(例如,如果您希望标签周围有额外的 space):
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);
}
我对 libgdx BitMapFont 有疑问,我在 scene2d table 内显示标签,但文本的某些部分的字体是 "cut"(见下文)。
这是我的代码:
用于声明字体:
font12 = new BitmapFont(Gdx.files.internal("fonts/text.fnt"));
font12.setUseIntegerPositions(false);
font12.getData().setScale(0.2f);
用于声明 table :
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);
感谢您的帮助。
[编辑]
这是我尝试使用 freetype 的代码,但这看起来并不流畅:
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/OpenSans-Regular.ttf"));
FreeTypeFontParameter parameter = new FreeTypeFontParameter();
parameter.size = 18;
parameter.color = Color.BLACK;
generator.scaleForPixelHeight(18);
parameter.minFilter = Texture.TextureFilter.Linear;
parameter.magFilter = Texture.TextureFilter.Linear;
parameter.mono = false;
parameter.gamma = 2f;
font12 = generator.generateFont(parameter); // font size 12 pixels
font12.setUseIntegerPositions(false);
font12.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
generator.dispose(); // don't forget to dispose to avoid memory leaks!
首先,您应该始终避免缩放字体,因为结果像素化并且看起来非常糟糕。您可以使用 FreeTypeFontGenerator 生成程序中所需的正确大小的字体:
https://github.com/libgdx/libgdx/wiki/Gdx-freetype
将组件添加到 table 时,table 会设置其子组件的大小。本质上,当标签添加到 table.
时,table 将覆盖标签的大小为确保标签保持相同大小,请像这样设置包含标签的 table 单元格的大小:
table.add(label).size(label.getWidth(), label.getHeight());
您还可以在将标签添加到 table 时对标签应用不同的尺寸(例如,如果您希望标签周围有额外的 space):
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);
}