Die Ausgabe meines Schriftprogramms ist verzerrt. Ich bin mir ziemlich sicher, dass das Problem mit x und y zu tun hat, und wie printLetter()
sie benutzt. Es wird möglicherweise mit mehreren Zahlen für x und y verwirrt? Bitte lassen Sie mich wissen, wenn Sie zusätzlichen Code benötigen. 'findCoords' wird von innerhalb der Gameloop aufgerufen.Mein ursprüngliches Java Font-Programm - Bei Verwendung verschiedener Buchstaben verzerrt?
Zusätzliche Hintergrundinfo:
Es nutzt LWJGL und seine OpenGL. Die und +0.25
in printLetter()
ist, wie groß jede Kachel im Hauptbild ist (das Hauptbild, das jeden der Buchstaben enthält, ist 78 * 24, und jeder Buchstabe ist 6 * 6.), proportional zu 1 und xcoords [] und ycoords [] Arrays von doubles: xcoords [] enthält 0/13, 1/13, 2/13, 3/13 usw. und ycoords [] enthält 0/4, 1/4, 2/4, 3/4 , für glTexCoord
muss im Verhältnis zu 1 sein. Hier ist ein Bild des Bildes, das es die Texturkoordinaten nimmt.
public void findCoords(String chars){
int numChars = chars.length();
for(int z = 0; z < numChars; z++){
char ch = chars.charAt(z);
int x;
int y;
switch(ch){
//LETTERS
case 'A': x= 0; y= 0; break; case 'N': x= 0; y= 1; break;
case 'B': x= 1; y= 0; break; case 'O': x= 1; y= 1; break;
case 'C': x= 2; y= 0; break; case 'P': x= 2; y= 1; break;
case 'D': x= 3; y= 0; break; case 'Q': x= 3; y= 1; break;
case 'E': x= 4; y= 0; break; case 'R': x= 4; y= 1; break;
case 'F': x= 5; y= 0; break; case 'S': x= 5; y= 1; break;
case 'G': x= 6; y= 0; break; case 'T': x= 6; y= 1; break;
case 'H': x= 7; y= 0; break; case 'U': x= 7; y= 1; break;
case 'I': x= 8; y= 0; break; case 'V': x= 8; y= 1; break;
case 'J': x= 9; y= 0; break; case 'W': x= 9; y= 1; break;
case 'K': x= 10; y= 0; break; case 'X': x= 10; y= 1; break;
case 'L': x= 11; y= 0; break; case 'Y': x= 11; y= 1; break;
case 'M': x= 12; y= 0; break; case 'Z': x= 12; y= 1; break;
//NUMBERS
case '0': x= 0; y= 2; break; case '5': x= 5; y= 2; break;
case '1': x= 1; y= 2; break; case '6': x= 6; y= 2; break;
case '2': x= 2; y= 2; break; case '7': x= 7; y= 2; break;
case '3': x= 3; y= 2; break; case '8': x= 8; y= 2; break;
case '4': x= 4; y= 2; break; case '9': x= 9; y= 2; break;
//PUNCTUATION
case '.': x= 10; y= 2; break; case '!': x= 12; y= 2; break;
case ',': x= 11; y= 2; break;
case '?': x= 0; y= 3; break; case '"': x= 2; y= 3; break;
case ':': x= 1; y= 3; break; case ' ': x= 3; y= 3; break;
default: x= 0; y= 3;
}
int offs = scale*z;
printLetter(x, y, offs);
}
}
.
void printLetter(int x, int y, int offs){
GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2f(0+offs, scale);
GL11.glTexCoord2d(xcoords[x]+0.0769, ycoords[y]+0.25);
GL11.glVertex2f(scale+offs, scale);
GL11.glTexCoord2d(xcoords[x]+0.0769, ycoords[y]);
GL11.glVertex2f(scale+offs, 0);
GL11.glTexCoord2d(xcoords[x], ycoords[y]);
GL11.glVertex2f(0+offs, 0);
GL11.glTexCoord2d(xcoords[x], ycoords[y]+0.25);
GL11.glEnd();
GL11.glFlush();
}
Wenn chars
ein einzelner Buchstabe wiederholt wird, wie "AAAAA"
oder "BBBBBB"
, dann gibt es keine Probleme IWHT das Bild. http://i.imgur.com/MFs5A.png. Wenn es jedoch mehrere Buchstaben in chars
wie "AAABBB"
oder "ABABAB"
gibt, werden die Buchstaben schief. Das folgende Bild ist, wie die Ausgabe aussieht, wenn chars
ist
"AAABBB"
Vor nannten die Fälle sich die Druckverfahren mit zum Beispiel
case 'A': printLetter(xcoord[0], ycoord[0], z)
ich es geändert wie es jetzt ist, vielleicht das Programm nicht so durcheinander zu bringen. Hoffentlich, auch wenn es das Problem nicht behebt, machte es das ein wenig einfacher zu beheben?
Das Problem kann sein, weil verschiedene Buchstaben unterschiedliche Koordinaten haben und das ist der Weg verpfuscht printLetter()
funktioniert? Es ist nicht in den Fällen, weil ich getestet habe machen zwei Buchstaben (A und F) haben die gleiche x und y, und machte chars
"AFAFAF", und es gab keine Probleme.
Es scheint auch, je weiter die Buchstaben auseinander sind, desto mehr vermasselt erscheinen sie. Vergleichen Sie diese "AAAZZZ" auf die oben "AAABBB":
Ich werde das versuchen, wenn ich zurückkomme. Ist das eine Lösung für das Problem oder nur ein Fehler, den ich gemacht habe? – GlassZee
@GlassZee Ich bin sicher, dass dies Ihr Problem verursacht, das Ergebnis sieht genau so aus, wie ich es angesichts des Fehlers erwarten würde. – Tim
Es hat funktioniert! :] und als Beweis ... http://i.imgur.com/TJLWI.png – GlassZee