2013-12-15 44 views
6

我在嘗試在我的遊戲項目中放置文本/對話框系統時遇到了一個問題。當我創建一個字體並調用其上的繪製方法傳遞相機更新的spriteBatch時,字體的每個像素都具有與一個精靈相同的尺寸。LibGDX sprite批量字體壞比例渲染

我得到以下渲染:

font draw scale issue

什麼,你可以在圖片中看到的是對的「你好」與每個像素超大的「h」的頂部。 相同的相機用於渲染瓷磚/精靈。

我想達到的效果是與此類似:

Elliot quest example

下面是代碼:

// 15 * 12 tile size 
    camera = new OrthographicCamera(Const.VIEWPORT_WIDTH, Const.VIEWPORT_HEIGHT); 
    BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonts/myfont.fnt")); 

    // .... 

    // p => player position 
    camera.position.x = p.getX(); 
    camera.position.y = p.getY(); 
    camera.update(); 

    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    font.draw(batch, "hello", p.getX(), p.getY()); 
    batch.end(); 

我一直在使用font.setScale()沒有成功嘗試。

有人知道如何做到這一點嗎?

回答

6

創建一個相機與一個更大的視口(例如像素完美的測試設備)。並用它來渲染你的字體。也不要爲每個渲染創建一個新的字體,在開始時創建它並使用它。

編輯:

要計算你應該繪製文本的位置,它會是這樣。讓我們假設你的世界相機被稱爲「凸輪」,而你的文字相機被稱爲「guicam」。一個叫做「object」的GameObject。

ratew = guicam.viewportWidth/cam.viewportWidth; //<--- you should calculate these 2 only once. 
rateh = guicam.viewportHeight/cam.viewportHeight; 

x = guicam.position.x-(cam.position.x-object.position.x)*ratew; 
y = guicam.position.y-(cam.position.y-object.position.y)*rateh; 
font.draw(batch, "stuff", x, y); 
+0

謝謝您的答覆,但我想文字的座標是一樣的精靈渲染相機。我需要手動更新座標嗎? –

+2

是的,你必須手動計算它,我編輯我的答案,告訴你如何。 – Lestat

+0

它完美的工作,非常感謝你這個很好的答案。 –

-1

您可以嘗試Texture.TextureFilter.Linear爲分鐘&最大的過濾器。

Libgdx AssetManager負載位圖字體與所需的過濾器:

BitmapFontLoader.BitmapFontParameter param = new BitmapFontLoader.BitmapFontParameter(); 
param.maxFilter = Texture.TextureFilter.Linear; 
param.minFilter = Texture.TextureFilter.Linear; 
assetManager.load(fileName, BitmapFont.class, param);