How to align text drawn by SpriteBatch.DrawString?

前端 未结 3 1159
广开言路
广开言路 2021-02-05 14:16

Is there an easy way to align text to the right and center (instead of default left)?

相关标签:
3条回答
  • 2021-02-05 14:49

    The first step is to measure the string using SpriteFont.MeasureString().

    Then, for example if you want to draw it to the left of a certain point, instead of to the right as is the default, then you need to subtract the X width of the measurement from the text drawing origin. If you want it to be centered, then you can use half the measurement, etc.

    0 讨论(0)
  • 2021-02-05 14:51

    I use this code:

     [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 );
        }
    
    0 讨论(0)
  • 2021-02-05 14:53
    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();
    
    0 讨论(0)
提交回复
热议问题