我想为我的游戏在屏幕上写文本,比如fps,随机的项目和东西的文本。我该怎么写那段文字呢?
没有基本的Game类是可能的吗?没有像这样的命令吗?g.drawString("Hello World", 100, 100);
发布于 2013-10-05 00:42:54
更新:这个答案现在已经过时了,在最新版本的LWJGL中根本不起作用。在我完全更新此答案之前,我建议您查看此处:https://jvm-gaming.org/t/lwjgl-stb-bindings/54537
您可以使用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。
发布于 2014-10-18 01:03:28
尝试制作所需大小的BufferedImage。然后获取它的Graphics并绘制一个字符串。然后将其转换为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()函数绘制字节缓冲区。
https://stackoverflow.com/questions/19182843
复制相似问题