2016-06-19 7 views
1

У меня проблема с libgdx BitMapFont, я отображаю метки внутри таблицы scene2d, но шрифт «разрезан» в некоторых частях текста (см. Ниже).Libgdx font cut

enter image description here

Вот мой код:

для объявления шрифта:

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

Спасибо за вашу помощь.

[EDIT]

Вот код, я попытался с помощью 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! 

enter image description here

ответ

1

Первое, что вы всегда должны избегать масштабирования шрифтов, так как результат неровный и выглядит очень плохо. Вы можете генератор шрифтов для правильного размера, что вам нужно в вашей программе с помощью FreeTypeFontGenerator:

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

При добавлении компонентов в таблице таблица устанавливает размер на его дочерних компонентов. По существу, таблица будет переопределять размер метки, когда метка будет добавлена ​​в таблицу.

Для того, чтобы убедиться, что этикетка сохраняет тот же размер, установите размер на ячейку таблицы, которая держит этикетку, как это:

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

Вы также можете применить различный размер на этикетке при добавлении его к таблица (если, например, вы хотите иметь дополнительное пространство вокруг этикетки):

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

EDIT

T его код работает для меня, попробуйте.

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

+0

Я попытался GDX-FreeType, но без успеха. См. Мое редактирование для кода. Что я сделал не так? – JavaDev

+0

Я отредактировал свой ответ и добавил код, надеюсь, что это поможет. – Tekkerue

+0

Спасибо, что ваш пример работает, моя проблема возникает из области просмотра. Для моего экрана игры я определяю свой видовой экран как gamePort = новый FitViewport (GameWorld.WORLD_WIDTH, GameWorld.WORLD_HEIGHT, gameCam); Возможно, это вызывает искажение. Вы знаете, как лучше всего управлять окнами просмотра и камерой? На самом деле, моя игра - своего рода настольная игра. – JavaDev

 Смежные вопросы

  • Нет связанных вопросов^_^