OpenGL Slick, TrueTypeFont nie działa

0

Cześć. Mam szybkie pytanie. Próbuję napisać text w 2d, i wszystko jest dobrze:

Font awtFont = new Font("Times New Roman", Font.BOLD, 24);
TrueTypeFont font = new TrueTypeFont(awtFont, false);

font.drawString((float)width -(float) buttonWidth,(float)textHeight, "HAYO");
 

dopóki nie użyje przeładowania tej funkcji:

 
font.drawString((float)width -(float) buttonWidth,(float)textHeight, "HAYO", Color.green); 

Wtedy narzeka na to że "HAYO" to nie CharSequence, cokolwiek to jest, mimo że wcześniej wszystko działało.

0

Okej, więc czy w takim razie jest jakikolwiek inny sposób żeby coś napisać?

0

Przede wszystkim, w JavaDocu TrueTypeFont widzę:

Deprecated. Use UnicodeFont instead

0

Z UnicodeFont mam to samo.Tutaj jest kod klasy.

package snakeTheGame;

import java.awt.Color;
import java.awt.Font;

import org.lwjgl.opengl.GL11;
import org.newdawn.slick.UnicodeFont;

public class TitleScreen {
	private int width = 800, height = 600;
	private final int border = 10;
	private final int buttonHeight = 74;
	private final int buttonWidth = 216;
	private final int textHeight = 47;
	private final int numberOfButtons = 6;
	private final float[] buttonY = {height, height - buttonHeight, height - buttonHeight, height};
	private final float[] buttonX = {width - buttonWidth,width - buttonWidth, width, width};
	private final String[] buttonNames = {"New Game", "Load Game", "High Scores", "Instructions", "Credits", "Exit"};
	
	public void renderScreen(){
		//texture
		GL11.glColor3f(1.0f, 0f, 0f);
		GL11.glBegin(GL11.GL_QUADS);
			GL11.glVertex2f(border, border);
			GL11.glVertex2f(border, height - border);
			GL11.glVertex2f(width - (2 * border) - buttonWidth, height - border);
			GL11.glVertex2f(width - (2 * border) - buttonWidth, border);
		GL11.glEnd();
		
		//buttons
		GL11.glColor3f(0f, 1.0f, 0f);
		GL11.glBegin(GL11.GL_LINES);
			for (int i = 0; i<numberOfButtons + 1; i++){
				GL11.glVertex2f(buttonX[0] - border, buttonY[0] - ((i+1) * border) - (i * buttonHeight));
				GL11.glVertex2f(buttonX[1] - border, buttonY[1] - ((i+1) * border) - (i * buttonHeight));
	
				GL11.glVertex2f(buttonX[2] - border, buttonY[2] - ((i+1) * border) - (i * buttonHeight));
				GL11.glVertex2f(buttonX[3] - border, buttonY[3] - ((i+1) * border) - (i * buttonHeight));
	
				GL11.glVertex2f(buttonX[0] - border, buttonY[0] - ((i+1) * border) - (i * buttonHeight));
				GL11.glVertex2f(buttonX[3] - border, buttonY[3] - ((i+1) * border) - (i * buttonHeight));
	
				GL11.glVertex2f(buttonX[1] - border, buttonY[1] - ((i+1) * border) - (i * buttonHeight));
				GL11.glVertex2f(buttonX[2] - border, buttonY[2] - ((i+1) * border) - (i * buttonHeight));
			}
		GL11.glEnd();
		
		//text
		Font awtFont = new Font("Times New Roman", Font.BOLD, 24);
		UnicodeFont font = new UnicodeFont(awtFont, 64, false, false);
		for (int i = 0; i<numberOfButtons;i++){
			font.drawString(width - buttonWidth, textHeight, "HayO!", Color.green);
		}
	}
	public TitleScreen(int width, int height){
		this.width = width;
		this.height = height;
	}
}	 

A tu inicjalizacja:

	public void initGL2D() {
		GL11.glMatrixMode(GL11.GL_PROJECTION);
		GL11.glLoadIdentity();
		GL11.glOrtho(0, width, 0, height, 1, -1);
		GL11.glMatrixMode(GL11.GL_MODELVIEW);
	} 

Prawdopodobnie sam bym to rozwiązał gdyby nie te BARDZO zrozumiałe błędy...
http://imageshack.us/photo/my-images/844/javanx.jpg/

0

Kod w UnicodeFont jest taki:

        public void drawString (float x, float y, String text, Color color, int startIndex, int endIndex) {
                drawDisplayList(x, y, text, color, startIndex, endIndex);
        }

        public void drawString (float x, float y, String text) {
                drawString(x, y, text, Color.white);
        }

        public void drawString (float x, float y, String text, Color col) {
                drawString(x, y, text, col, 0, text.length());
        }

Z tego wynika, iż praktycznie nie ma szans, by użycie przeładowanej metody tzn tej z parametrem typu Color coś zmieniało. Ewentualnie spróbuj zmienić Color.green na Color.white i zobacz co się stanie. Jeśli będzie się zachowywało inaczej niż bez wyspecyfikowanego koloru, to to będzie WTF.

Edit:
Moim zdaniem to po prostu błąd w Eclipse, tzn coś się gdzieś rozsynchronizowało w magicznej autokompilacji Eclipse'a i trzeba przebudować cały projekt.

0

Bez tekstu nie da rady. Do tego nie ma żadnej innej biblioteki która by dawała możliwość pisania.

0

Przekompilowałeś cały projekt w Eclipse?

0

Tak. Jakoś się postaram to zrobić bez tekstu, tam gdzie będzie trzeba to wstawię tekstury.

0

Ale ten błąd z tego obrazka jak dla mnie wygląda na klasyczny WTF Eclipse'owy. Spróbuj to skompilować z palca lub w innym IDE.

Ewentualnie użyj czegoś takiego:

font.drawString(width - buttonWidth, textHeight, "HayO!", Color.green, 0, "HayO!".length());

Jeśli to zadziała to na pewno masz WTF Eclipse'owy.

0

Chyba już wiem o co chodzi. Właśnie spróbował jeszcze raz ale z inną klasą i po napisaniu :

 font.drawString(20, 20, "HAYO!", Color.green);

Dostałem informacje o tym że nie zaimportowałem Color. Chcąc szybko naprawić problem, najechałem i wybrałem pierwsze rozwiązanie.
Zadziałało. Zadziałało dlatego że poprzednim razem importowałem klasę Color z

import java.awt.Color; 

a tym razem zaimportowałem z

import org.newdawn.slick.Color; 

Trochę głupio z ich strony że napisali własną klasę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1