2013-10-04 50 views
5

我想在屏幕上爲我的遊戲寫文字,例如fps,物品和東西的隨機文本。我怎樣才能寫出這些文字?用LWJGL在屏幕上書寫文字

沒有基礎遊戲課程有可能嗎?沒有像這樣的命令g.drawString("Hello World", 100, 100);

+0

LWJGL真的是OpenGL的一個很薄的包裝 - 如果你想做這樣的事情更簡單,我會建議像JMonkey這樣的提供場景圖API的東西。 – berry120

+2

你是否在說如果我想寫文本,它會更好地轉向遊戲引擎? – Israelg99

+0

你說你正在尋找一個簡單的'drawString()'類型方法,這意味着你想要簡單 - JMonkey在這方面(和其他許多方面)會使事情變得更簡單。 – berry120

回答

4

更新:此答案現在已過時,並且根本不適用於最新版本的LWJGL。直到我完全更新這個答案,我建議你看看這裏:http://www.java-gaming.org/topics/lwjgl-stb-bindings/36153/view.html


您可以使用TrueType字體在Slick-util庫特徵。

使用一個共同的字體很容易,只要創建一個這樣的字體:

TrueTypeFont font; 
Font awtFont = new Font("Times New Roman", Font.BOLD, 24); //name, style (PLAIN, BOLD, or ITALIC), size 
font = new TrueTypeFont(awtFont, false); //base Font, anti-aliasing true/false 

如果你想從.ttf文件加載的字體,這是一個稍微棘手:

try { 
    InputStream inputStream = ResourceLoader.getResourceAsStream("myfont.ttf"); 

    Font awtFont = Font.createFont(Font.TRUETYPE_FONT, inputStream); 
    awtFont = awtFont.deriveFont(24f); // set font size 
    font = new TrueTypeFont(awtFont, false); 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

在成功創建TrueTypeFont後,可以這樣繪製:

font.drawString(100, 50, "ABC123", Color.yellow); //x, y, string to draw, color 

欲瞭解更多信息,你可以看看TrueTypeFontjava.awt.Font的文檔,以及我從這裏獲得了大部分代碼的Slick-Util tutorial

+0

你能否更新鏈接?他們已經過期。先謝謝你。 – IchHabsDrauf

+0

@IchHabsDrauf謝謝你讓我知道;我會盡我所能。 –

+0

我嘗試了你的兩條建議,但都沒有爲我工作。第一個是在窗口的指定位置打印一個黃色的Rect。我嘗試了第二個選項,通過從我的控制面板加載Consolas.ttf到我的項目文件夾中的一個目錄,並使用inputStream就像在你的例子,但它沒有奏效。它仍然畫了一個黃色雷克。我該怎麼辦? – IchHabsDrauf

1

嘗試製作所需尺寸的BufferedImage。然後得到它的圖形並繪製一個字符串。然後將其轉換爲ByteBuffer並將其呈現在OpenGL中。

String text = "ABCD"; 
int s = 256; //Take whatever size suits you. 
BufferedImage b = new BufferedImage(s, s, BufferedImage.TYPE_4BYTE_ABGR); 
Graphics2D g = b.createGraphics(); 
g.drawString(text, 0, 0); 

int co = b.getColorModel().getNumComponents(); 

byte[] data = new byte[co * s * s]; 
b.getRaster().getDataElements(0, 0, s, s, data); 

ByteBuffer pixels = BufferUtils.createByteBuffer(data.length); 
pixels.put(data); 
pixels.rewind(); 

現在pixels包含需要繪製所需的圖像數據。 使用GL11.glTexImage2D()函數來繪製字節緩衝區。

+0

你能解釋一下我們如何在這種情況下使用'glTexImage2D()'? – IchHabsDrauf

+0

可否請你解釋一下在這種情況下我們如何使用'glTexImage2D()'? – IchHabsDrauf