2013-10-04 9 views
5

Ich möchte Text auf dem Bildschirm für mein Spiel schreiben, für Dinge wie fps, zufälliger Text für Gegenstände und Sachen. Wie kann ich diesen Text schreiben?Schreibe Text auf den Bildschirm mit LWJGL

Ist es möglich ohne die Basic Game-Klasse? Gibt es keinen solchen Befehl g.drawString("Hello World", 100, 100);?

+0

LWJGL ist wirklich eine dünne Hülle um OpenGL - wenn Sie solche Dinge einfacher machen möchten, würde ich etwas wie JMonkey vorschlagen, die eine Scenegraph API bietet. – berry120

+2

sagst du, dass es besser ist, zu einer Spielengine zu wechseln, wenn ich Text schreiben will? – Israelg99

+0

Sie sagen, dass Sie nach einer einfachen Methode 'drawString()' suchen, die Einfachheit bedeutet - JMonkey wird die Dinge in dieser Hinsicht (und vielen anderen) vereinfachen. – berry120

Antwort

4

Update: Diese Antwort ist jetzt veraltet und funktioniert überhaupt nicht mit den neuesten Versionen von LWJGL. Bis ich diese Antwort vollständig aktualisieren, empfehle ich, dass Sie hier: http://www.java-gaming.org/topics/lwjgl-stb-bindings/36153/view.html


Sie die Truetype-Schriftarten in der Slick-util Bibliothek verfügen nutzen könnten.

eine gemeinsame Schrift verwenden ist einfach, erstellen Sie einfach die Schriftart wie folgt aus:

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 

Wenn Sie die Schrift aus einer .ttf Datei laden möchten, ist es ein wenig komplizierter:

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(); 
} 

Nachdem Sie erfolgreich eine TrueTypeFont erstellt haben, können Sie es wie folgt zeichnen:

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

Weitere Informationen finden Sie in der Dokumentation für TrueTypeFont und java.awt.Font, und die Slick-Util tutorial Ich habe die meisten dieser Code aus.

+0

Könnten Sie bitte die Links aktualisieren? Sie sind bereits abgelaufen. Vielen Dank im Voraus. – IchHabsDrauf

+0

@IchHabsDrauf Danke, dass Sie mich wissen lassen; Ich werde es schaffen, wenn ich kann. –

+0

Ich habe beide Vorschläge ausprobiert und keiner von ihnen hat für mich funktioniert. Der erste druckte nur ein gelbes Rechteck an der angegebenen Stelle im Fenster. Ich habe die zweite Option ausprobiert, indem ich Consolas.ttf von meiner Systemsteuerung in ein Verzeichnis in meinem Projektordner geladen habe und den inputStream wie in diesem Beispiel verwendet habe, aber es hat nicht funktioniert. Es zeichnete immer noch nur einen gelben Reck. Was soll ich machen? – IchHabsDrauf

1

Versuchen Sie eine BufferedImage der erforderlichen Größe. Dann hole seine Grafiken und zeichne einen String. Dann wandle es in eine ByteBuffer um und rende es in 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(); 

Jetzt pixels enthält die erforderlichen Bilddaten, die benötigt werden. Verwenden Sie GL11.glTexImage2D() Funktion, um den Bytepuffer zu zeichnen.

+0

Könntest du bitte erklären, wie wir 'glTexImage2D()' in diesem Fall verwenden können? – IchHabsDrauf

+0

Könntest du bitte erklären, wie wir 'glTexImage2D()' in diesem Fall verwenden können? – IchHabsDrauf