2017-12-16 8 views
4

Ich versuche 2D-Text-Rendering in meinem LWJGL-Spiel zu implementieren und habe überall nach einer funktionierenden Lösung gesucht, aber immer den gleichen Fehler bekommen. Ich versuche derzeit, this tutorial zu folgen. Hier ist der Fehler:TrueTypeFont.drawString() nicht unterstützt

Exception in thread "main" java.lang.IllegalStateException: Function is not supported 
    at org.lwjgl.BufferChecks.checkFunctionAddress(BufferChecks.java:58) 
    at org.lwjgl.opengl.GL11.glColor4f(GL11.java:893) 
    at org.newdawn.slick.opengl.renderer.ImmediateModeOGLRenderer.glColor4f(ImmediateModeOGLRenderer.java:124) 
    at org.newdawn.slick.Color.bind(Color.java:182) 
    at org.newdawn.slick.TrueTypeFont.drawString(TrueTypeFont.java:363) 
    at org.newdawn.slick.TrueTypeFont.drawString(TrueTypeFont.java:355) 
    at guis.Gui.drawString(Gui.java:23) 
    at engineTester.MainGameLoop.main(MainGameLoop.java:110) 

und hier ist meine Gui Klasse:

package guis; 

import java.awt.Font; 

import org.newdawn.slick.TrueTypeFont; 

public class Gui { 

    private TrueTypeFont font; 
    private Font awtFont; 

    public Gui() { 
     this.awtFont = new Font("Times New Roman", Font.BOLD, 24); 
     this.font = new TrueTypeFont(awtFont, false); 
    } 

    public void drawString(int x, int y, String text) { 
     font.drawString(x, y, text); 
    } 

} 

Warum wird dieser Fehler verursacht?

EDIT: In Bezug auf diese Antwort auf eine andere Frage: https://stackoverflow.com/a/26319508/5838494 Ich habe das bereits getan und es funktioniert nicht.

+0

Die Suche im Internet nach 'lwjgl IllegalStateException: Funktion wird nicht unterstützt' bringt _lots_ von Treffern. Hast du das versucht? Hat keine der dort gefundenen Informationen für Sie funktioniert? Bitte machen Sie Grundlagenforschung, bevor Sie hier posten. –

+0

@JimGarrison keiner von ihnen arbeitete für mich, deshalb fragte ich hier –

Antwort

1

Sie müssen Ihre OpenGL-Version niedriger als 3.0 einrichten, da die von TrueTypeFont verwendeten Funktionen in 3.x entfernt wurden. Oder schauen Sie in opengl 3.x/4.x Opengl3.3 , wenn Sie ältere opengl-Versionen nicht unterstützen müssen.

+0

Ich erhalte einen Fehler: Ausnahme im Thread "Haupt" java.lang.IllegalArgumentException: Profile werden nur auf OpenGL Version 3.2 oder höher unterstützt. \t bei org.lwjgl.opengl.ContextAttribs.withProfileCore (ContextAttribs.java:188) \t bei renderEngine.DisplayManager.createDisplay (DisplayManager.java:23) \t bei engineTester.MainGameLoop.main (MainGameLoop.java:49) –

1

Das hier Problem ist wahrscheinlich, dass Sie so etwas tun

public Gui theGui = new Gui(); 

in der Hauptklasse, denke ich. Wenn Sie dies tun, wird der Konstruktor aufgerufen, und wenn Sie dort Ihre TrueTypeFont erstellen, gibt es noch keinen OpenGL-Kontext, da die Hauptklasse ebenfalls initialisiert wird und die Zeichnung deshalb fehlschlägt, weil sie keinen OpenGL-Kontext hat.

Sie können versuchen, dies in nur eine Deklaration wie public Gui gui; zu ändern, und dann, wenn Sie Ihre Anwendung laden, nachdem Sie den GL-Kontext erstellt haben, weisen Sie das Feld mit this.gui = new Gui();.

Aber ich kann nur hier raten, weil Sie nicht viel Code in Ihrer Frage haben. Es könnte andere Probleme mit diesem Code geben, wie etwa die Inkompatibilität der Slick-Bibliothek (haben Sie die neueste Version oder besser die Version, von der bekannt ist, dass sie mit Ihrer OpenGL-Version kompatibel ist?) Oder Ähnliches.