Я делаю 2D движок, использующий Java на основе сущностей.Физика и спрайты сделаны, но мне все еще нужно уметь рисовать текст с классом BaseText
.Для экспериментальных целей я использую следующий код в классе Renderer
(который обрабатывает отрисовку всех спрайтов и т. Д.):
BufferGraphics.drawString(((BaseText) Entity).getText(), (int) -(Origin.getX() * PositionTransform), (int) -Origin.getY());
Однако я хотел бы переместить этот код вsetText(final String Text)
метод сущности BaseText
, т. е. когда она вызывается, создается новое изображение, содержащее указанный текст (возможно, с разными шрифтами и размерами и тому подобное, я еще не решил).
MyПроблема заключается в следующем: я хотел бы иметь возможность изменить размер (масштабировать) текст по своему вкусу.Было бы также неплохо преобразовать текст в изображение, так как я могу получить его размеры и установить размер самого текстового объекта.
В основном, то, что мне нужно, следует следующим образом:
- Возьмите нужную строку и введите ее в метод
setText
. - Возьмите строку и нарисуйте ее на изображении, размер которого соответствует размеру текста.
- Установите это новое изображение в поле
Image
в сущности, чтобы двигатель мог его нарисовать.
Возможно ли это?Может быть способ сделать это с помощью класса FontMetrics
или как там его можно назвать, но я не настолько уверен, потому что я не использовал его раньше.
Редактировать: Позвольте мне уточнить: я хочу создать изображение BufferedImage, основанное на размере некоторого текста, заданного для определенного шрифта и размера, а не на размере текста, чтобы соответствовать изображению.так любезно предоставленный код, я смог добавить некоторый код в движок, который, во что бы то ни стало, просто должен работать.Однако, опять же, даже с этим drawRect, изображение либо остается прозрачным, либо как-то не рисуется.Позвольте мне предоставить несколько панировочных сухарей: -snip-
Глупо то, что все остальные спрайты, изображения и тому подобное хорошо рисуются, так что я не уверен, как это может быть в Renderer.Кстати, это был метод paint ().
Edit 3:
...
Э-э ...
...
О, боже.
Iя ...
...
Текст не может объяснить, как сильно я подпирал себе левую ладонь в лицо.
BaseText.java
@Override
public BufferedImage getImage() {return null;}
Renderer.java
BufferedImage Image = Entity.getImage();
Я
огромный идиот.
Спасибо, Эндрю, за этот код.Он работал нормально.
Редактировать 4: Кстати, вот последний код, который я использовал:
public void setText(final String Text)
{
Graphics2D Draw = (Graphics2D) Game.View.getBuffer().getDrawGraphics();
FontMetrics Metrics = Draw.getFontMetrics();
Rectangle2D Bounds = Metrics.getStringBounds(Text, Draw);
BufferedImage NewImage = new BufferedImage((int) Bounds.getWidth(), (int) (Bounds.getHeight() + Metrics.getDescent()), BufferedImage.TYPE_INT_RGB);
Draw = (Graphics2D) NewImage.getGraphics();
Draw.setColor(new Color(0xAAFF0000));
Draw.drawRect(0, 0, NewImage.getWidth(), NewImage.getHeight());
Draw.drawString(Text, 0, (int) Bounds.getHeight());
this.Image = NewImage;
this.Text = Text;
this.setSize(new Vector(NewImage.getWidth(), NewImage.getHeight()));
}