我正在使用一个使用较小视口的LibGDX游戏。
public static float BOX_SCALE = 10;
public static final float VIRTUAL_WIDTH = (int) (320 / BOX_SCALE);
public static final float VIRTUAL_HEIGHT = (int) (480 / BOX_SCALE);
float viewportHeight = MyConstants.Screen.VIRTUAL_HEIGHT;
float viewportWidth = MyConstants.Screen.VIRTUAL_HEIGHT * Gdx.graphics.getWidth() / Gdx.graphics.getHeight();
例如,我的视口可以具有大小(32,48)。我使用Scene2D进行渲染。出于某种原因,每当我创建一个TextButton时,文本永远不会居中。这是用于按钮的BitmapFont。
FreeTypeFontParameter fontParam = new FreeTypeFontParameter();
fontParam.size = 14;
FreeTypeFontGenerator generator2 = new FreeTypeFontGenerator(Gdx.files.internal("data/font.ttf"));
labelFont = generator2.generateFont(fontParam);
labelFont.setScale(1f / BOX_SCALE);
labelFont.setColor(Color.BLACK);
如果我将BOX_SCALE值设置为1,则TextButton正常,但我需要模拟Box2D世界。我想我可以为每个按钮创建单独的标签并手动定位它们但我无法弄清楚为什么会发生这种情况。如果有更清洁的解决方案也感兴趣。
答案 0 :(得分:1)
默认情况下,字体位置四舍五入到最接近的世界游戏单位。这是基于您的字体将渲染像素完美的假设。在您的情况下,您不需要像素完美字体,所以请致电:
labelFont.setUseIntegerPositions(false);
此外,在您的fontParam
中,您应将其设置为使用mipmap,并将minFilter
设置为MipmapLinearNearest,将magFilter
设置为Linear。这会使它看起来更好,因为默认情况下,过滤设置为最近/最近,如果你没有渲染像素完美,看起来很糟糕。