1

libgdx BitMapFont に問題があり、scene2d テーブル内にラベルを表示していますが、テキストの一部でフォントが「カット」されています (以下を参照)。

ここに画像の説明を入力

これが私のコードです:

フォントを宣言する場合:

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

テーブルを宣言する場合:

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!

ここに画像の説明を入力

4

1 に答える 1

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

ここに画像の説明を入力

于 2016-06-19T17:56:18.227 に答える