2013-10-04 3 views
5

Я хочу написать текст на экране для своей игры, для таких вещей, как fps, случайный текст для предметов и прочее. Как я могу написать этот текст?Напишите текст на экране с помощью LWJGL

Возможно ли это без класса Basic Game? Разве нет такой команды g.drawString("Hello World", 100, 100);?

+0

LWJGL - действительно довольно тонкая оболочка вокруг OpenGL - если вы хотите сделать что-то подобное проще, я бы предложил что-то вроде JMonkey, которое предоставляет API-интерфейс scenegraph. – berry120

+2

Вы говорите, что его лучший переход к движку игры, если я хочу написать текст? – Israelg99

+0

Вы говорите, что ищете простой метод типа drawString(), который подразумевает, что вы хотите простоты - JMonkey упростит в этом отношении (и многие другие). – berry120

ответ

4

Обновление: этот ответ устарел и вообще не работает с последними версиями LWJGL. Пока я не обновлять этот ответ полностью, я рекомендую вам посмотреть здесь: http://www.java-gaming.org/topics/lwjgl-stb-bindings/36153/view.html


Вы можете использовать TrueType шрифты особенность в Slick-util библиотеке.

Используя общий шрифт легко, просто создать шрифт, как это:

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 Я получил большую часть этого кода.

+0

Не могли бы вы обновить ссылки? Они уже истекли. Заранее спасибо. – IchHabsDrauf

+0

@IchHabsDrauf Спасибо, что сообщили мне; Я подойду к нему, когда смогу. –

+0

Я пробовал оба ваших предложения, и никто из них не работал на меня. Первый из них печатал только желтый Rect в указанном месте в окне. Я попробовал второй вариант, загрузив Consolas.ttf из моей панели управления в каталог в моей папке проекта и использовал inputStream так же, как в вашем примере, но это не сработало. Он по-прежнему рисовал только желтый рек. Что мне делать? – IchHabsDrauf

1

Попробуйте сделать BufferedImage требуемого размера. Затем получите свою графику и нарисуйте строку. Затем преобразуйте его в 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(), чтобы нарисовать буфер байта.

+0

не могли бы вы объяснить, как мы можем использовать 'glTexImage2D()' в этом случае? – IchHabsDrauf

+0

не могли бы вы объяснить, как мы можем использовать 'glTexImage2D()' в этом случае? – IchHabsDrauf

Смежные вопросы