0

DrawString関数を使用して送信するにはどうすればよいrectangleですか (配置を設定するため)。テキストが長方形の幅よりも長い場合、行は行の終わりまで続きますか? (複数行の場合ではありません!!)

4

1 に答える 1

1

水平方向の宛先領域の外側にあるテキストを削除する拡張メソッドを作成しました。(これはあなたが意図したものだと思います)テキストにオプションの省略記号(...)を追加して、テキストが続くことをユーザーに知らせます。

public static void DrawStringTrim(this SpriteBatch spriteBatch, SpriteFont font, Rectangle rect, string text, Color color)
{
    // Characters to append to end of text, can be removed.
    string ellipsis = "...";

    // Get the width of the text string.
    int size = (int)Math.Ceiling(font.MeasureString(text).X);

    // Is text longer than the destination region? If not, simply draw it
    if (size > rect.Width)
    {
        // Account for the length of the "..." (ellipsis) string.
        int es = string.IsNullOrWhiteSpace(ellipsis) ? 0 : (int)Math.Ceiling(font.MeasureString(ellipsis).X);
        for (int i = text.Length - 1; i > 0; i--)
        {
            int c = 1;

            // Remove two letters if the preceding character is a space.
            if (char.IsWhiteSpace(text[i - 1]))
            {
                c = 2;
                i--;
            }

            // Chop off the tail of the string and re-measure the width.
            text = text.Remove(i, c);
            size = (int)Math.Ceiling(font.MeasureString(text).X);

            // Text is short enough?
            if (size + es <= rect.Width)
                break;
        }

        // Append the ellipsis to the truncated string.
        text += ellipsis;
    }

    // Draw the text
    spriteBatch.DrawString(font, text, new Vector2(rect.X, rect.Y), color);
}

その後、必要な文字列を描画できますspriteBatch.DrawStringTrim(font, new Rectangle(Width, Height), "Some really really long text!", Color.White);

于 2013-11-03T16:47:32.733 に答える