2014-03-06 31 views
0

我正在使用一個使用較小視口的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_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); 

enter image description here


如果我的BOX_SCALE值設置爲1,則TEXT按鈕動作正常,但我需要模擬Box2D的世界。我想我可以爲每個按鈕創建單獨的標籤並手動定位它們,但我無法弄清楚爲什麼會發生這種情況。如果有更清潔的解決方案,也感興趣。

回答

1

默認情況下,字體位置四捨五入到最近的世界遊戲單位。這是基於您的字體將呈現像素完美的假設。在你的情況,你不想像素完美的字體,所以叫:

labelFont.setUseIntegerPositions(false); 

而且,在你fontParam你應該將它設置爲使用的貼圖,並設置minFilter到MipmapLinearNearest和magFilter線性。這將使它看起來更好,因爲默認情況下過濾設置爲Nearest/Nearest,如果不是渲染像素完美,則看起來不好。

+0

謝謝你的回覆。過濾器部分使文本看起來更好,但使用setUseIntegerPositions爲false仍然不能解決問題。 – sheitan

相關問題