エンティティに基づいてJavaを使用して2次元エンジンを作成しています。物理とスプライトは終わりですが、まだBaseText
クラスでテキストを描くことができる必要があります。私は、しかし、のsetText(final String Text)
メソッドにこのコードを移動するかできるようにしたいと思いJavaの文字列からサイズイメージを作成する
BufferGraphics.drawString(((BaseText) Entity).getText(), (int) -(Origin.getX() * PositionTransform), (int) -Origin.getY());
:実験目的のために私は(それはすべてのスプライトとし、このような描画処理する)Renderer
クラスに次のコードを使用していますBaseText
エンティティ、つまり新しいイメージと呼ばれるときに、指定されたテキスト(異なるフォントやサイズなどで、決まっていない可能性があります)を含むイメージが作成されます。
私の問題はこれです:私は自分の好みに合わせてテキストのサイズを変更(スケール)できるようにしたいと思います。私はそれの寸法を取得し、テキストエンティティ自体のサイズを設定することができますので、イメージをイメージに変換させることもいいでしょう。
基本的に、私は必要なのは、これらの線に沿って何かを、以下:
- は、目的の文字列を取り、
setText
方法にそれを養います。 - 文字列を取り込んで、テキストが正確に収まるように、イメージ上に描画します。
- エンティティ内の
Image
フィールドにこの新しいイメージを設定して、エンジンが描画できるようにします。
これも可能ですか? FontMetrics
クラスまたはこれを呼び出すことができる方法があるかもしれませんが、以前はそれを使用していないので、私はそれほど確信していません。
編集:私は明確にしましょう:私は特定のフォントやサイズ、ないサイズのイメージに合うようにテキストに設定され、いくつかのテキストのサイズに基づいてBufferedImageを作成にしたいです。
編集2:この優秀なコードを提供してくれたこの仲間のアンドリューのおかげで、エンジンにコードを追加することができました。是非ともはになるはずです。しかし、そこにdrawRectがあっても、画像は透明であるか、何らかの形で描画されません。ブレッドクラムを提供しましょう:-snip-
愚かなことは、他のすべてのスプライトや画像などが上手く描画されることです。レンダリングの仕方がわかりません。ところで、それはpaint()メソッドでした。
編集3:
...
ええと...
...
オーマイ。
私は...
...
テキストは、私が左手の手のひらで顔の中で自分自身を傷つけたことを説明できません。
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()));
}
※「テキストは表示されません」※画像の可視領域***より上の点***に書かれている可能性があります。例については私の答えを見てください。 –