如何使其正确呈现字体?
当它绘制文本时,它看起来像这样:
它应该呈现出某些效果" L:1 |时间:1450"
渲染类的代码如下。
import java.io.InputStream;
import org.lwjgl.opengl.GL11;
import org.newdawn.slick.AngelCodeFont;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;
import org.newdawn.slick.util.ResourceLoader;
public class Graphics {
private static AngelCodeFont font12;
public static void initFont() {
try {
font12 = new AngelCodeFont("./src/res/textures/Jump12.fnt", new Image("src/res/textures/Jump12_0.png"));
} catch (SlickException e) {
e.printStackTrace();
}
}
public static void render(double x, double y, double width, double height, int xOffset, int yOffset, SpriteSheet sheet) {
sheet.bind();
if (sheet.getName().equals("spritesheet")) {
xOffset = xOffset << 4;
yOffset = yOffset << 4;
}
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
GL11.glTranslated(xOffset, yOffset, 0);
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2d(x / width, y / height);
GL11.glVertex2d(0, 0);
GL11.glTexCoord2d((x + 1) / width, y / height);
GL11.glVertex2d(width, 0);
GL11.glTexCoord2d((x + 1) / width, (y + 1) / height);
GL11.glVertex2d(width, height);
GL11.glTexCoord2d(x / width, (y + 1) / height);
GL11.glVertex2d(0, height);
GL11.glEnd();
GL11.glLoadIdentity();
}
public static void renderInfo(int dist, int health, int x, int y, int l, int timer) {
SpriteSheet sheet = loadSpritesheet("jumpbar");
sheet.bind();
GL11.glTranslated(0, 0, 0);
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2d(0, 0);
GL11.glVertex2d(40.5, 5);
GL11.glTexCoord2d(1, 0);
GL11.glVertex2d(40.5 + Math.abs(dist - 1), 5);
GL11.glTexCoord2d(1, 1);
GL11.glVertex2d(40.5 + Math.abs(dist - 1), 10.5);
GL11.glTexCoord2d(0, 1);
GL11.glVertex2d(40.5, 10.5);
GL11.glEnd();
sheet = loadSpritesheet("healthbar");
sheet.bind();
GL11.glTranslated(0, 0, 0);
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2d(0, 0);
GL11.glVertex2d(146.5, 5);
GL11.glTexCoord2d(1, 0);
GL11.glVertex2d(146.5 + health / 2, 5);
GL11.glTexCoord2d(1, 1);
GL11.glVertex2d(146.5 + health / 2, 10);
GL11.glTexCoord2d(0, 1);
GL11.glVertex2d(146.5, 10);
GL11.glEnd();
GL11.glLoadIdentity();
font12.drawString(100, 60, "L: " + l + " | Time: " + timer);
font12.drawString(1, 20, "x: " + x);
font12.drawString(1, 40, "y: " + y);
}
public static SpriteSheet loadSpritesheet(String sheet) {
SpriteSheet spritesheet = null;
InputStream ref = ResourceLoader.getResourceAsStream("res/textures/" + sheet + ".png");
try {
spritesheet = new SpriteSheet(sheet, ref, 256, 256);
spritesheet.setName(sheet);
} catch (SlickException e) {
e.printStackTrace();
}
return spritesheet;
}
}
是否存在与OpenGL存在的一些冲突,我不知道,还是一切都错了?
答案 0 :(得分:0)
看起来字形呈现为不透明的四边形。你还记得启用混合吗?
glEnable(GL_BLEND);
如果是项目的惯例,请务必将其关闭。