2016-06-19 60 views
1

我有一個libgdx BitMapFont的問題,我在scene2d表格中顯示標籤,但字體在文本的某些部分(見下文)被「剪切」。Libgdx字體切割

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

謝謝您的幫助。

[編輯]

這裏是我使用的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); 

編輯

ŧ他的代碼適合我,請嘗試一下。

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 = new FitViewport(GameWorld.WORLD_WIDTH,GameWorld.WORLD_HEIGHT,gameCam); 也許這是在扭曲。你知道管理視口和相機的最佳方式嗎?其實,我的遊戲是一種棋盤遊戲。 – JavaDev