我想在屏幕上为我的游戏写文字,比如fps,项目和东西的随机文本。我怎么写那个文字?
没有基本游戏课可以吗?是不是有这样的命令g.drawString("Hello World", 100, 100);
?
答案 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
有关详情,请查看TrueTypeFont
和java.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()
函数绘制字节缓冲区。