Java LibGDX文本未在较小的视口中居中

Java LibGDX文本未在较小的视口中居中,java,android,libgdx,Java,Android,Libgdx,我正在开发一个使用较小视口的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_HEIGH

我正在开发一个使用较小视口的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进行渲染。出于某种原因,每当我创建文本按钮时,文本从不居中。这是用于按钮的位图字体

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世界。我想我可以为每个按钮创建单独的标签并手动定位,但我不明白为什么会发生这种情况。如果有更干净的解决方案,您也会感兴趣。

默认情况下,字体位置四舍五入到最近的世界游戏单位。这是基于一个假设,即您的字体将呈现像素完美。在您的情况下,您不需要像素完美的字体,因此请拨打:

labelFont.setUseIntegerPositions(false);

此外,在
fontParam
中,您应该将其设置为使用mipmap,并将
minFilter
设置为mipmaplinearest,将
magFilter
设置为Linear。这将使它看起来更好,因为默认情况下,过滤设置为“最近的/最近的”,如果渲染像素不完美,这看起来很糟糕。

谢谢您的回复。过滤器部分使文本看起来更好,但使用setUseIntegerPositions设置为false仍然无法解决问题。