Java Canvas drawString не будет выделять текст жирным шрифтом, если не работает из NetBeans - PullRequest
0 голосов
/ 03 июня 2018

Я делаю многопользовательскую онлайн-игру (ничего сложного, просто игра с танками сверху вниз) на Java Canvas.Вы могли бы подумать, что я здесь, чтобы спросить о сетевых вещах, сокетах и ​​т. Д., Но я гораздо дальше, и я столкнулся с чем-то странным.

В принципе, есть несколько строк, которыеЯ рисую на холсте жирным шрифтом.Когда я запускаю его из NetBeans (не собирая, просто нажимая F6 / зеленую кнопку запуска), текст отображается жирным шрифтом, как и должно быть.Но когда я собираю проект и запускаю JAR-файл, текст не выделяется жирным шрифтом.

Примечание:

  • Я попытался обновить Java, так как довольно много обновлений было позади,Не удалось исправить.

Вот фрагмент кода, показывающий, что я правильно рисую жирный текст, но я не знаю, что еще мне нужно показать для такого рода проблемы, каккод не может быть проблемой.

g.setFont(new Font("TimesRoman", Font.BOLD, 50));
g.setColor(Color.red);
g.drawString("Connection Failed.", x, y);

TL; DR - рисование жирного текста на холсте не жирным при запуске файла JAR, но при запуске из NetBeans.

Всепомощь приветствуется.Спасибо!

1 Ответ

0 голосов
/ 03 июня 2018

Похоже, вы можете создать шрифт в своей функции рисования.Учитывая, что функция рисования может вызываться несколько раз в секунду, это может привести к неэффективности источника и, возможно, к истощению ресурсов.Создайте свой шрифт, когда вы создаете свой класс, возможно, как статический ресурс, а затем используете один и тот же объект шрифта в каждом вызове рисования.

Объекту Graphics разрешается использовать ярлыки при рисовании объектов во имя эффективности.,Это может включать в себя не выделение жирным шрифтом больших шрифтов, не использовать сглаживание на диагональных линиях и т. Д. Скорость - это главное.Конечно, вы можете сказать графическому движку, что вам важнее внешний вид, чем скорость, используя Graphics2D.setRendingHint (...)

import static java.awt.RenderingHints.*;

void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;

    g2d.setRendingHint(KEY_RENDERING, VALUE_RENDERING_QUALITY);
    g2d.setRendingHint(KEY_TEXT_ANTIALIAS, VALUE_TEXT_ANTIALIAS_ON);

Вы можете установить несколько подсказок одновременно с помощью setRendingHints (Подсказки карты) .

...