複数行のテキストを書き込める透明なメッセージ ボックス (長方形) を作成することはできますか?
2 に答える
Andy のソリューションで十分ですが、目的の透明性が得られるまで数回の試行が必要になる場合があります。また、プログラムで新しいリソースを作成してロードすることも含まれます。幸いなことに、これを回避でき、実行時に単一の透明ピクセルを生成することでプロセスを構成可能にすることができます。これは、呼び出しのRectangle
引数の境界まで拡張されます。SpriteBatch.Draw(Texture2D, Rectangle, Nullable<Rectangle>, Color)
//You can probably turn this in to a re-useable method
Byte transparency_amount = 100; //0 transparent; 255 opaque
Texture2D texture = new Texture2D(Device,1,1,false,SurfaceFormat.Color);
Color[] c = new Color[1];
c[0] = Color.FromNonPreMultiplied(255,255,255,transparency_amount);
texture.SetData<Color>(c);
texture
描画呼び出しで新しい変数を使用します。
複数行のテキストに関してはSpriteBatch.DrawString()
、StringBuilder 引数を受け入れるオーバーロードがあります。つまり、理論的には次のことができます。
//configure
StringBuilder sb = new StringBuilder();
sb.AppendLine("First line of text");
sb.AppendLine("Second line of text");
//draw
SpriteBatch.DrawString(font, sb, position, Color.White);
テクスチャの描画長方形のサイズを決定するのに役立つ別のヒントを提供します。
//spits out a vector2 *size* of the multiline text
Vector2 measurements = font.MeasureString(sb); //works with StringBuilder
次に、この情報から を作成し、Rectangle
パディングを与えることもできます。
Rectangle rectangle = new Rectangle(window_x, window_y, (int)measurements.X, (int)measurements.Y);
rectangle.Inflate(5); //pad by 5 pixels
次に、ウィンドウを描画する色を含め、すべてを描画呼び出しに入れます
SpriteBatch.Draw (texture, rectangle, Color.Black); //draw window first
SpriteBatch.DrawString(font, sb, position, Color.GreenYellow); //draw text second
その結果、見栄えが良くなり、より自動化され、構成可能になります。これらすべてを、通知メッセージ用の再利用可能な構成可能なクラスにラップできるはずです。
注: 描画コード以外のものは、実際のゲームの Draw() 呼び出しではなく、LoadContent() または別の場所にある必要があります。
構文エラーを許してください。頭のてっぺんから書いただけです.. :)