Как выровнять текст, нарисованный с помощью SpriteBatch.DrawString?
Есть ли простой способ выровнять текст вправо и в центре (вместо значения по умолчанию слева)?
Ответы
Ответ 1
Первым шагом является измерение строки с помощью SpriteFont.MeasureString()
.
Затем, например, если вы хотите нарисовать его слева от определенной точки, а не вправо, как по умолчанию, тогда вам нужно вычесть ширину X измерения из исходного текста. Если вы хотите, чтобы он был центрирован, вы можете использовать половину измерения и т.д.
Ответ 2
Я использую этот код:
[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 );
}
Ответ 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();