Hi,
ich versuche zurzeit einen Timer in mein Spiel einzubauen. Die bisher benötigte Zeit in Sekunden soll mithilfe einer Font auf dem Bildschirm ausgegeben werden. Ich lasse bereits in der Mitte des Bildschirms mithilfe von OpenGL ein kleines Fadenkreuz zeichnen. Das funktioniert auch einwandtfrei, aber sobald ich den String mit der Font auf dem Bildschirm ausgeben lasse, fängt zumindest der 3D-Teil an, stark zu flackern.
Mein Code sieht bisher folgendermaßen aus:
Die wichtigste Methode ist wohl drawOpenGL():
So funktioniert es, aber sobald ich die // vor "drawTimer()" entferne, fängt es an zu flackern.
Zum laden der Font verwende ich Slick. Slick ist ja eigentlich eine 2D-Library, aber ich zeichne die Font ja über die 3D-Szene, also sollte das ja kein Problem sein... oder? Und wenn es an Slick liegt, was könnte ich alternativ machen?
Ich hoffe ihr könnt mir weiterhelfen,
mfg tdc
ich versuche zurzeit einen Timer in mein Spiel einzubauen. Die bisher benötigte Zeit in Sekunden soll mithilfe einer Font auf dem Bildschirm ausgegeben werden. Ich lasse bereits in der Mitte des Bildschirms mithilfe von OpenGL ein kleines Fadenkreuz zeichnen. Das funktioniert auch einwandtfrei, aber sobald ich den String mit der Font auf dem Bildschirm ausgeben lasse, fängt zumindest der 3D-Teil an, stark zu flackern.
Mein Code sieht bisher folgendermaßen aus:
Java:
...
UnicodeFont timerfont;
...
public void initGame()
{
...
timerfont = loadFont(25f); //selbstgeschriebene Methode... daran sollte es nicht liegen
...
}
public void drawTimer()
{
timerfont.drawString(Display.getDisplayMode().getWidth()-80, 10, time+"", Color.white);
}
public void initOpenGL()
{
glEnable(GL_TEXTURE_2D); // Enable Texture Mapping
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
GLU.gluPerspective(
45.0f,
(float) Display.getDisplayMode().getWidth() / (float) Display.getDisplayMode().getHeight(),
0.1f,
100.0f);
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
// Really Nice Perspective Calculations
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}
public void drawOpenGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
//3D
if(objects != null)
{
for(GameObject obj:objects)
{
//Objekte werden gezeichnet
obj.initDraw();
obj.drawOpenGL();
obj.endDraw();
}
}
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0,getWidth(),0,getHeight(),-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//2D
drawInterface(); //zeichnet nur dieses "Fadenkreuz" OpenGL-2D-Zeichnungen funktionieren also
//drawTimer(); <=== sobald // entfernt wird, flackert es
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
}
public void drawInterface()
{
glColor3f(0.3f, 0.3f, 0.3f);
glBegin(GL_LINES);
glVertex2f(getWidth()/2-12, getHeight()/2);
glVertex2f(getWidth()/2+12, getHeight()/2);
glEnd();
glBegin(GL_LINES);
glVertex2f(getWidth()/2, getHeight()/2-12);
glVertex2f(getWidth()/2, getHeight()/2+12);
glEnd();
}
...
Die wichtigste Methode ist wohl drawOpenGL():
Java:
public void drawOpenGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
//3D
if(objects != null)
{
for(GameObject obj:objects)
{
obj.initDraw();
obj.drawOpenGL();
obj.endDraw();
}
}
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0,getWidth(),0,getHeight(),-1,1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//2D
drawInterface();
//drawTimer();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
}
So funktioniert es, aber sobald ich die // vor "drawTimer()" entferne, fängt es an zu flackern.
Zum laden der Font verwende ich Slick. Slick ist ja eigentlich eine 2D-Library, aber ich zeichne die Font ja über die 3D-Szene, also sollte das ja kein Problem sein... oder? Und wenn es an Slick liegt, was könnte ich alternativ machen?
Ich hoffe ihr könnt mir weiterhelfen,
mfg tdc