用LWJGL在屏幕上写文字

时间:2013-10-04 13:44:45

标签: java lwjgl slick2d

我想在屏幕上为我的游戏写文字,比如fps,项目和东西的随机文本。我怎么写那个文字?

没有基本游戏课可以吗?是不是有这样的命令g.drawString("Hello World", 100, 100);

2 个答案:

答案 0 :(得分:4)

更新:这个答案现在已经过时,并且根本不适用于最新版本的LWJGL。在我完全更新此答案之前,我建议您查看此处:http://www.java-gaming.org/topics/lwjgl-stb-bindings/36153/view.html


您可以使用Slick-util库中的TrueType字体功能。

使用常用字体很简单,只需创建如下字体:

TrueTypeFont font;
Font awtFont = new Font("Times New Roman", Font.BOLD, 24); //name, style (PLAIN, BOLD, or ITALIC), size
font = new TrueTypeFont(awtFont, false); //base Font, anti-aliasing true/false

如果你想从.ttf文件加载字体,那就有点棘手了:

try {
    InputStream inputStream = ResourceLoader.getResourceAsStream("myfont.ttf");

    Font awtFont = Font.createFont(Font.TRUETYPE_FONT, inputStream);
    awtFont = awtFont.deriveFont(24f); // set font size
    font = new TrueTypeFont(awtFont, false);

} catch (Exception e) {
    e.printStackTrace();
}

成功创建TrueTypeFont后,您可以这样绘制:

font.drawString(100, 50, "ABC123", Color.yellow); //x, y, string to draw, color

有关详情,请查看TrueTypeFontjava.awt.Font的文档,以及Slick-Util tutorial我获得的大部分代码。

答案 1 :(得分:1)

尝试制作所需尺寸的BufferedImage。然后得到它的Graphics并绘制一个String。然后将其转换为ByteBuffer并在OpenGL中进行渲染。

String text = "ABCD";
int s = 256; //Take whatever size suits you.
BufferedImage b = new BufferedImage(s, s, BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g = b.createGraphics();
g.drawString(text, 0, 0);

int co = b.getColorModel().getNumComponents();

byte[] data = new byte[co * s * s];
b.getRaster().getDataElements(0, 0, s, s, data);

ByteBuffer pixels = BufferUtils.createByteBuffer(data.length);
pixels.put(data);
pixels.rewind();

现在pixels包含您需要绘制的所需图像数据。 使用GL11.glTexImage2D()函数绘制字节缓冲区。