15

テキストを(デフォルトの左ではなく)右と中央に揃える簡単な方法はありますか?

4

3 に答える 3

20

私はこのコードを使用します:

 [Flags]
 public enum Alignment { Center=0, Left=1, Right=2, Top=4, Bottom = 8 }

 public void DrawString(SpriteFont font, string text, Rectangle bounds, Alignment align, Color color )
    {
        Vector2 size = font.MeasureString( text );
        Vector2 pos = bounds.GetCenter( );
        Vector2 origin = size*0.5f;

        if ( align.HasFlag( Alignment.Left ) )
            origin.X += bounds.Width/2 - size.X/2;

        if ( align.HasFlag( Alignment.Right ) )
            origin.X -= bounds.Width/2 - size.X/2;

        if ( align.HasFlag( Alignment.Top ) )
            origin.Y += bounds.Height/2 - size.Y/2;

        if ( align.HasFlag( Alignment.Bottom ) )
            origin.Y -= bounds.Height/2 - size.Y/2;

        DrawString( font, text, pos, color, 0, origin, 1, SpriteEffects.None, 0 );
    }
于 2012-04-21T23:17:13.443 に答える
18

最初のステップは、を使用して文字列を測定することSpriteFont.MeasureString()です。

次に、たとえば、デフォルトのように右側ではなく、特定のポイントの左側に描画する場合は、テキスト描画の原点から測定値のX幅を差し引く必要があります。中央に配置したい場合は、半分の測定値などを使用できます。

于 2012-04-21T23:00:55.463 に答える
-3
SpriteFont mFont;
SpriteBatch mSprite;

mSprite.Begin();
mSprite.DrawString(mFont, "YourText", new Vector2(graphicsDevice.Viewport.Width / 2 - mFont.MeasureString("YourText").Length() / 2, 0), Color.White, 0, new Vector2(0, 0), 1f, SpriteEffects.None, 0f);
mSprite.End();
于 2013-07-20T20:34:14.457 に答える