Libgdx像素化TextButton

时间:2015-03-09 17:54:38

标签: java android libgdx

我在libGDX中遇到了问题。我不想使用虚拟屏幕尺寸来在每部手机上使用相同的应用程序。我用hiero从.ttf生成了一个.fnt文件。然后我用这个.fnt制作了一个TextButton(使用皮肤)。但问题是,当我使用Viewport,Stage和Table设置虚拟屏幕(480x800)时,我设置了这样的内容:

在构造函数中:

viewport = new StretchViewport(480, 800);
stage = new Stage(viewport);

在resize方法中:

viewport.update(width,height);

并且TextButton上的文本是像素化的。

Screenshot with pixelated buttons

如何解决问题,或者如何在所有设备上将屏幕设置为相同并获得流畅的文字?

谢谢!

2 个答案:

答案 0 :(得分:0)

使用FreeTypeFontGenerator,它会在程序运行时动态地从.ttf创建一个BitmapFont,这样就可以为设备生成正确大小的BitmapFont,而不需要拉伸/缩放。 https://github.com/libgdx/libgdx/wiki/Gdx-freetype

答案 1 :(得分:0)

我肯定会查看FreeTypeFontGenerator并使用BitmapFont,因此您可以使用纹理过滤器,这会对质量产生巨大影响。 TextureFilter.Linear是您正在寻找的。没有经过测试,但有些内容如下:

    BitmapFont yourBitmapFont = new BitmapFont();
    yourBitmapFont.getRegion().getTexture().setFilter(TextureFilter.Linear,TextureFilter.Linear);


    Skin tileSkin = new Skin();
    tileSkin.add("white", new Texture("whatever/image/path"));
    tileSkin.add("default", new BitmapFont());

    TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
    textButtonStyle.up = tileSkin.newDrawable("white");
    textButtonStyle.down = tileSkin.newDrawable("white", Color.DARK_GRAY);
    textButtonStyle.checked = tileSkin.newDrawable("white",
            Color.LIGHT_GRAY);
    textButtonStyle.over = tileSkin.newDrawable("white", Color.LIGHT_GRAY);
    textButtonStyle.font = _yourBitmapFont;     
    tileSkin.add("default", textButtonStyle);